在Discuz系统中添加服务器端敏感词过滤,可通过以下三种专业方案实现:
一、后台可视化配置(推荐方案)
1. 登录DZX后台 → 内容 → 敏感词过滤
2. 在「违禁词汇列表」区域按格式添加:
3. 高级设置建议:
- 启用「强制审核」功能,设置触发阈值
- 勾选「全站内容过滤」选项
- 配置「忽略用户组」白名单
二、数据库直写方案(适用于批量操作)
1. 通过phpMyAdmin执行:
- UPDATE `pre_common_setting`
- SET `svalue` = REPLACE(svalue, '};', '"敏感词1"=>"替换词1","敏感词2"=>"替换词2"\n};')
- WHERE `skey` = 'censor'
复制代码
2. 命令行维护方法:
- mysql -u[user] -p[pass] -e "USE [database]; UPDATE pre_common_setting SET svalue=CONCAT(svalue,'"新词"=>"***",') WHERE skey='censor'"
复制代码
三、文件缓存注入方案(开发人员适用)
1. 创建敏感词注入脚本(/tmp/censor_update.php):
- <?php
- define('IN_DISCUZ', true);
- require_once '/wwwroot/source/class/class_core.php';
- $discuz = C::app();
- $discuz->init();
- $censor = C::t('common_setting')->fetch('censor');
- $new_words = ['政治词'=>'**','暴恐词'=>'※※'];
- $merged = array_merge(unserialize($censor), $new_words);
- C::t('common_setting')->update('censor', serialize($merged));
- updatecache('setting');
- @unlink(__FILE__);
复制代码
2. 通过CLI执行:
- php /tmp/censor_update.php && rm -f /tmp/censor_update.php
复制代码
注意事项:
1. 全角/半角字符自动转换机制
2. 正则表达式过滤语法支持(需在词条前加^)
3. 多级缓存更新机制:
- 执行后需清理data/cache目录
- 更新内存缓存(如使用Redis需flush)
4. 性能优化建议:
- 单次批量添加不超过500词条
- 采用树状字典结构存储
- 对超过10万词库建议使用内存表
高级扩展方案:
对于需要实现AI语义过滤的场景,可参考DZX插件开发规范创建:
1. 继承plugins\filter\filter_base类
2. 重写check()方法实现深度学习模型调用
3. 配置异步任务处理队列
(本方案遵循Discuz!X3.5内核规范,兼容UTF8/GBK编码环境)
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |