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

b4wnujal  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(266)

我有一个有很多页面的wordpress网站的mysql数据库。我正在使用的流行的avada主题有一个特性,可以将html代码块插入到内容区域中。我用它在整个站点中插入了许多URL。我刚刚迁移了这个站点,发现所有的代码块仍然有我以前的测试环境url,因为代码块是在数据库中的[fusion\u code][/fusion\u 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>

我需要一个方法:
在数据库中搜索这些代码块的所有示例。
对[fusion\u code][/fusion\u code]标记之间的内容进行base64解码。
用新的基本url替换旧的测试基本url。
base64只在[fusion\u code][/fusion\u code]标记之间对结果进行编码,而保留其余内容不变。
这可能吗?如果是这样,正确的mysql查询应该是什么?

bq3bfh9z

bq3bfh9z1#

沿着这条线的一些东西应该能工作,但我不能让它正常工作。。

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 ;

相关问题