Joomla PHP 使用文本文件将单词列入黑名单

Joomla PHP using a text file to blacklist words

所以我的 joomla 根路径中有一个名为 banned.txt 的文本文档,内容如下所示(换行):

fuck
fucking
etc

现在我已经用下面的代码解决了这个问题。但是,与其在我的 php 代码中有一大堆数组,我宁愿以某种方式从我的 public_html 文件夹中的文本文档中提取被禁止的词。

$mtitle = $file['name'];
$find = array('fuck', 'fucking', 'etc');
foreach ($find as $n) {
    if(strpos($mtitle,$n) !== false) {
        $this->setError(JText::_('Banned word detected'));
        return false;
    }
}

任何帮助提取 c:/website/public_html/banned.txt 并检查该文件以查看是否有任何单词匹配的帮助都很好 :)

Com_contact 包含三个用于过滤特定字符串(电子邮件、主题行和消息)的规则,您可以在此处找到它们 https://github.com/joomla/joomla-cms/tree/staging/components/com_contact/models/rules.

您应该在您的组件中做的(假设您不想仅仅指望加载这些规则)是创建您自己的规则并将其放在文件层次结构中的相同位置。查看 com_contact 以了解如何使单词可配置以及如何将其添加到表单定义中。

file 不适合您的目的吗?我们可以在 PHP documentation:

中读到

file — Reads entire file into an array

因此使用 file 您的代码将如下所示:

$mtitle = $file['name'];
$find = file("c:/website/public_html/banned.txt",FILE_IGNORE_NEW_LINES);
foreach ($find as $n) {
    if(strpos($mtitle,$n) !== false) {
        $this->setError(JText::_('Banned word detected'));
        return false;
    }
}

请注意,只有定义 $find 的行发生了变化,因为 file 正在返回数组。

编辑:

似乎 file 正在拆分文件,但仍附加换行符。要忽略它们,您必须使用 FILE_IGNORE_NEW_LINES 作为第二个参数。我已更新代码以包含它。

Each line in the resulting array will include the line ending, unless FILE_IGNORE_NEW_LINES is used, so you still need to use rtrim() if you do not want the line ending present.

使用 Windows OS 执行以下操作似乎对我有用。在 banned.txt 中,我用新行分隔了每个禁用词。

Banned.txt :

fuck
fucking
etc

PHP :

$mtitle = $file['name'];
//$find = array('fuck', 'fucking', 'etc');
$find = explode("\r\n", file_get_contents("c:/website/public_html/banned.txt"));
foreach ($find as $n) {
    if(strpos($mtitle,$n) !== false) {
        $this->setError(JText::_('Banned word detected'));
        return false;
    }
}

如果有人有任何改进或发现我在使用此代码时遇到任何问题,请务必说明,我们感谢您提供改进方面的帮助。