Discuz3.X批量替换帖子标题、内容

微信扫一扫,分享到朋友圈

Discuz3.X批量替换帖子标题、内容
收藏 00

此方案适用于discuz3.X版本,可解决以下问题:

1.大量帖子中有敏感词语需要替换

2.网站升级,帖子里的内链是绝对链接的需要批量更换

3.帖子防采集也可能会用到

打开mysql输入以下代码,执行即可

修改论坛标题

UPDATE pre_forum_thread SET subject=REPLACE(subject,'替换前','替换后');

修改论坛内容:

UPDATE pre_forum_post SET message=REPLACE(message,'替换前','替换后');

修改文章内容

UPDATE pre_portal_article_content SET content=REPLACE(content,替换前','替换后');

拓展

上述只是基础替换,若想替换指定内容时,涉及到正则替换问题,mysql使用正则替换2种思路

思路1:

以下是数据库中的一个表table:

+—-+——————————————+
| id | name |
+—-+——————————————+
| 1 | sdfsf<contact>beijing</contact>sldjfsld |
| 2 | sdfsf<contact>shanghai</contact>sldjfsld |
| 3 | sdfsf<contact>jn</contact>sldjfsld |
| 4 | sdfsf<contact>qd</contact>sldjfsld |
+—-+——————————————+

遇到的要求是:将该表中<contact>到</contact>的内容删除。

众所周知,replace函数是不支持正则表达式的,所以只能采用其他的方法处理。

update tabaleA set name = replace(name, substring(name, locate('<contact>', name),locate('</contact>', name)-locate('<contact>'+10, name)),'');

执行之后,报错:Truncated incorrect DOUBLE value解决办法,经过查询发现是concat(Str,’’)函数错误问题,有的DB支持+操作符,而有的就不可以必须使用concat 函数。

将SQL修改如下:

update t_global_project set name = replace(name, substring(name, locate('<contact>', name),locate('</contact>', name)-locate(concat('<contact>',''), name)),'');

思路2

REGEXP_REPLACE()函数用于模式匹配。它通过匹配字符来替换给定的字符串字符。

此函数为MYSQL8.0版本新增,低于8.0版本没有此函数

UPDATE tableName set `name` = REGEXP_REPLACE(`name`, '<.*>', '') WHERE `name` REGEXP '<.*>';

 

一个热爱互联网的咸鱼
上一篇

discuz应用中心购买的插件破解方法(discuz插件多网站使用)

下一篇

帝国cms自动首图作为缩略图方法

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

热门

    抱歉,30天内未发布文章!
返回顶部