如何在MySQL中搜索和替换base64子字符串?

时间:2018-11-25 11:16:04

标签: mysql wordpress-theming

我有一个包含许多页面的WordPress网站的MySQL数据库。我正在使用的流行的Avada主题具有将HTML代码块插入内容区域的功能。我用它在整个站点中插入许多URL。我刚刚迁移了站点,发现所有代码块仍然具有我的旧测试环境URL,因为这些代码块是在[fusion_code] [/ fusion_code]标记之间的数据库中以base64编码的。数据库中的内容字段大部分为纯文本,直到我们到达一个代码块,然后对其进行编码。看起来像这样:

<here is lots of unencoded content and html tags>**[fusion_code]PGEgaHJlZj0iaHR0cDovL2xvY2FsaG9zdC9lc3RlZW0vY29zbWV0aWMtc3VyZ2VyeS9ib2R5L2FiZG9taW5vcGxhc3R5LXR1bW15LXR1Y2svIj4=[/fusion_code]**<here is more unencoded content and html tags>**[fusion_code]PGEgaHJlZj0iaHR0cDovL2xvY2FsaG9zdC9lc3RlZW0vY29zbWV0aWMtc3VyZ2VyeS9ib2R5L2FiZG9taW5vcGxhc3R5LXR1bW15LXR1Y2svIj4=[/fusion_code]**<here is more unencoded content and html tags etc>

我需要一种方法:

1)在数据库中搜索这些代码块的所有实例。

2)对[fusion_code] [/ fusion_code]标签之间的内容进行base64解码。

3)用新的基本URL替换旧的测试基本URL。

4)Base64将结果编码在[fusion_code] [/ fusion_code]标签之间,而其余内容保持不变。

这可能吗?如果是这样,正确的MySQL查询将是什么?

1 个答案:

答案 0 :(得分:0)

应该遵循这些原则,但是我无法使其正常工作。

DELIMITER $$
CREATE FUNCTION fusion_decode(post_content LONGTEXT)
RETURNS LONGTEXT
DETERMINISTIC
BEGIN
    DECLARE code LONGTEXT;
    WHILE post_content LIKE '%[fusion_code]%' DO
        SET code = SUBSTRING_INDEX(SUBSTRING_INDEX(post_content, '[/fusion_code]', 1), '[fusion_code]', -1);
        SET post_content = REPLACE(post_content, CONCAT('[fusion_code]', code, '[/fusion_code]'), FROM_BASE64(code));
    END WHILE;
    RETURN post_content;
END $$
DELIMITER ;