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

时间:2015-03-27 10:48:51

标签: php file joomla strpos

所以我在我的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并检查该文件以查看是否有任何匹配的字词会很棒:)

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

  

文件 - 将整个文件读入数组

因此,使用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 作为第二个参数。我已更新代码以包含它。

  

结果数组中的每一行都包含行结尾,除非   使用FILE_IGNORE_NEW_LINES,因此如果您仍需要使用rtrim()   不希望行结束。

答案 2 :(得分:1)

使用Windows操作系统执行以下操作似乎对我有用。在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;
    }
}

如果有人有任何改进或看到我使用此代码有任何问题,请说明,所以对改进的帮助表示赞赏。