DEDE表单如何禁止特定关键词?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 DEDE建站 正文
  1. 简单方法:利用DEDE自带的“关键字过滤”功能,这个方法最简单,但不够灵活,所有表单都会受影响。
  2. 推荐方法:修改PHP文件,为特定表单添加自定义过滤,这个方法最灵活,可以精确控制哪些表单需要过滤,以及如何过滤。

下面我将详细介绍这两种方法。

DEDE表单禁止一些词
(图片来源网络,侵删)

使用DEDE后台自带的“关键字过滤”功能

这个功能是全局性的,会对整个网站中所有使用 FilterStud() 函数的地方生效,包括文章标题、内容、留言等。

操作步骤:

  1. 登录DEDE后台:使用你的管理员账号登录到织梦后台。

  2. 进入“系统”->“系统基本参数”:在左侧菜单栏找到“系统”选项,点击进入,然后选择“系统基本参数”。

    DEDE表单禁止一些词
    (图片来源网络,侵删)
  3. 找到“关键字过滤设置”:在参数设置页面,找到“关键字过滤设置”这一项,它通常包含以下几个选项:

    • 关键字替换内容:在这里输入你想要禁止的词,多个词用英文逗号 隔开。
    • 过滤开关:选择“是”来启用此功能。
    • 替换符号:选择你希望将敏感词替换成的符号,、、 等。
    • 是否审核:选择“是”后,包含敏感词的内容将不会直接显示,而是进入待审核状态,选择“否”则会直接替换掉敏感词后显示。
  4. 保存设置:设置完成后,点击页面底部的“保存基本参数”按钮。

优点

  • 操作简单,无需修改代码。
  • 一键全局生效。

缺点

DEDE表单禁止一些词
(图片来源网络,侵删)
  • 不够灵活:无法针对某个特定的表单(比如只过滤留言表单,不过滤反馈表单)进行设置。
  • 功能单一:只能替换,无法实现更复杂的逻辑,比如直接禁止提交并提示。

修改PHP文件,为特定表单添加自定义过滤(推荐)

这种方法更强大,可以实现“如果提交内容包含敏感词,则不允许提交,并给出友好提示”的效果,我们以最常见的 留言簿 为例。

操作步骤:

  1. 准备敏感词列表: 在你的网站根目录下创建一个名为 badwords.txt 的文件,在这个文件里,每行写一个你想要禁止的词。

    # badwords.txt 内容示例
    垃圾广告
    色情
    赌博
    代写
  2. 修改留言簿处理文件: 找到并打开织梦处理留言提交的PHP文件,这个文件通常位于 /plus/ 目录下,名为 guestbook.php

  3. 添加过滤代码: 在 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_contentsexplode:用于读取文件内容并将其分割成一个数组。
    • $_POST['msg']:这里需要根据你实际的表单输入框 name 属性来修改,如果留言内容在 <textarea name="message"> 中,那么就应该用 $_POST['message']
    • strpos($haystack, $needle):用于检查字符串 $haystack 中是否包含子字符串 $needle
    • ShowMsg('提示信息', '跳转地址'):这是DEDE内置的一个页面提示和跳转函数。'-1' 表示返回上一页(也就是留言表单页)。
    • exit():在提示信息后,必须使用 exit() 来终止后续代码的执行,否则数据依然可能会被提交。
  4. 保存文件: 将修改后的 guestbook.php 文件上传回你的服务器,覆盖原文件。

如何应用到其他表单?

这个方法的核心逻辑是通用的,如果你想为其他表单(如反馈表 feedback.php、投稿表 post.php 等)添加过滤,只需:

  1. 找到对应的处理文件(如 feedback.php)。
  2. 在数据入库操作(通常是 $dsql->ExecuteQuery()$dsql->Execute('add1', $query)之前,复制粘贴上面第3步的代码。
  3. 根据该表单的字段名,修改 $_POST 的键名即可。

优点

  • 灵活可控:可以精确到每个表单,甚至每个字段。
  • 用户体验好:可以自定义提示信息,直接阻止非法提交。
  • 功能强大:可以实现比替换更复杂的逻辑。

缺点

  • 需要修改PHP文件,对新手有一定门槛。
  • 每次升级DEDE版本后,如果该文件被覆盖,需要重新修改。
特性 方法一(后台设置) 方法二(修改代码)
易用性 非常简单,可视化操作 需要修改代码,有一定难度
灵活性 ,全局统一设置 非常好,可针对特定表单和字段
功能 仅支持替换 可支持禁止提交并提示,功能更强大
维护性 无需维护,后台改即可 升级DEDE后可能需要重改代码
推荐场景 网站规模小,要求不高,快速部署 网站有正式内容发布需求,注重用户体验和信息安全

对于绝大多数网站,强烈推荐使用方法二,因为它能从根本上解决问题,并提供更好的用户体验。

-- 展开阅读全文 --
头像
C Lion如何配置C语言环境?
« 上一篇 今天
dede自适应会员中心如何实现跨设备兼容?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]