- 简单方法:利用DEDE自带的“关键字过滤”功能,这个方法最简单,但不够灵活,所有表单都会受影响。
- 推荐方法:修改PHP文件,为特定表单添加自定义过滤,这个方法最灵活,可以精确控制哪些表单需要过滤,以及如何过滤。
下面我将详细介绍这两种方法。

(图片来源网络,侵删)
使用DEDE后台自带的“关键字过滤”功能
这个功能是全局性的,会对整个网站中所有使用 FilterStud() 函数的地方生效,包括文章标题、内容、留言等。
操作步骤:
-
登录DEDE后台:使用你的管理员账号登录到织梦后台。
-
进入“系统”->“系统基本参数”:在左侧菜单栏找到“系统”选项,点击进入,然后选择“系统基本参数”。
(图片来源网络,侵删) -
找到“关键字过滤设置”:在参数设置页面,找到“关键字过滤设置”这一项,它通常包含以下几个选项:
- 关键字替换内容:在这里输入你想要禁止的词,多个词用英文逗号 隔开。
- 过滤开关:选择“是”来启用此功能。
- 替换符号:选择你希望将敏感词替换成的符号,、、 等。
- 是否审核:选择“是”后,包含敏感词的内容将不会直接显示,而是进入待审核状态,选择“否”则会直接替换掉敏感词后显示。
-
保存设置:设置完成后,点击页面底部的“保存基本参数”按钮。
优点:
- 操作简单,无需修改代码。
- 一键全局生效。
缺点:

(图片来源网络,侵删)
- 不够灵活:无法针对某个特定的表单(比如只过滤留言表单,不过滤反馈表单)进行设置。
- 功能单一:只能替换,无法实现更复杂的逻辑,比如直接禁止提交并提示。
修改PHP文件,为特定表单添加自定义过滤(推荐)
这种方法更强大,可以实现“如果提交内容包含敏感词,则不允许提交,并给出友好提示”的效果,我们以最常见的 留言簿 为例。
操作步骤:
-
准备敏感词列表: 在你的网站根目录下创建一个名为
badwords.txt的文件,在这个文件里,每行写一个你想要禁止的词。# badwords.txt 内容示例 垃圾广告 色情 赌博 代写 -
修改留言簿处理文件: 找到并打开织梦处理留言提交的PHP文件,这个文件通常位于
/plus/目录下,名为guestbook.php。 -
添加过滤代码: 在
guestbook.php文件中,找到处理表单提交数据的逻辑部分,通常在文件的开头部分,在数据入库之前,插入以下PHP代码。// 在 guestbook.php 文件顶部, require_once 'dedesql.php'; 之后添加如下代码: // 1. 读取敏感词文件 $badwords_file = DEDEDATA.'/badwords.txt'; // 使用DEDE定义的数据目录路径更安全 if (file_exists($badwords_file)) { $badwords_content = file_get_contents($badwords_file); // 将文件内容按行分割成数组,并去除空行和两端空格 $badwords = array_filter(array_map('trim', explode("\n", $badwords_content))); } else { // 如果文件不存在,则定义一个空的敏感词数组 $badwords = array(); } // 2. 获取并过滤表单提交的内容 // 假设你的留言表单字段名为 msg (message) 和 title (标题) $msg_title = isset($_POST['msg']) ? $_POST['msg'] : ''; $msg_body = isset($_POST['msg']) ? $_POST['msg'] : ''; // 根据你的表单字段名调整 // 3. 检查是否包含敏感词 $found_badword = false; foreach ($badwords as $word) { if (strpos($msg_title, $word) !== false || strpos($msg_body, $word) !== false) { $found_badword = true; break; // 找到一个敏感词就立即停止检查 } } // 4. 如果发现敏感词,则阻止提交并提示 if ($found_badword) { ShowMsg('您提交的内容包含敏感词,已被系统禁止!', '-1'); // ShowMsg是DEDE自带的提示函数 exit(); // 终止脚本执行 }代码解释:
DEDEDATA.'/badwords.txt':这是DEDE推荐的数据文件存放路径,通常在/data/目录下,这样更安全。file_get_contents和explode:用于读取文件内容并将其分割成一个数组。$_POST['msg']:这里需要根据你实际的表单输入框name属性来修改,如果留言内容在<textarea name="message">中,那么就应该用$_POST['message']。strpos($haystack, $needle):用于检查字符串$haystack中是否包含子字符串$needle。ShowMsg('提示信息', '跳转地址'):这是DEDE内置的一个页面提示和跳转函数。'-1'表示返回上一页(也就是留言表单页)。exit():在提示信息后,必须使用exit()来终止后续代码的执行,否则数据依然可能会被提交。
-
保存文件: 将修改后的
guestbook.php文件上传回你的服务器,覆盖原文件。
如何应用到其他表单?
这个方法的核心逻辑是通用的,如果你想为其他表单(如反馈表 feedback.php、投稿表 post.php 等)添加过滤,只需:
- 找到对应的处理文件(如
feedback.php)。 - 在数据入库操作(通常是
$dsql->ExecuteQuery()或$dsql->Execute('add1', $query))之前,复制粘贴上面第3步的代码。 - 根据该表单的字段名,修改
$_POST的键名即可。
优点:
- 灵活可控:可以精确到每个表单,甚至每个字段。
- 用户体验好:可以自定义提示信息,直接阻止非法提交。
- 功能强大:可以实现比替换更复杂的逻辑。
缺点:
- 需要修改PHP文件,对新手有一定门槛。
- 每次升级DEDE版本后,如果该文件被覆盖,需要重新修改。
| 特性 | 方法一(后台设置) | 方法二(修改代码) |
|---|---|---|
| 易用性 | 非常简单,可视化操作 | 需要修改代码,有一定难度 |
| 灵活性 | 差,全局统一设置 | 非常好,可针对特定表单和字段 |
| 功能 | 仅支持替换 | 可支持禁止提交并提示,功能更强大 |
| 维护性 | 无需维护,后台改即可 | 升级DEDE后可能需要重改代码 |
| 推荐场景 | 网站规模小,要求不高,快速部署 | 网站有正式内容发布需求,注重用户体验和信息安全 |
对于绝大多数网站,强烈推荐使用方法二,因为它能从根本上解决问题,并提供更好的用户体验。
