Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Joomla PHP使用文本文件将单词列入黑名单_Php_File_Joomla_Strpos - Fatal编程技术网

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

Joomla PHP使用文本文件将单词列入黑名单,php,file,joomla,strpos,Php,File,Joomla,Strpos,因此,我在joomla根路径中有一个名为banked.txt的文本文档,其内容如下(在新行中): 现在我已经用下面的代码解决了这个问题。但是,我宁愿从我的public\uhtml文件夹中的文本文档中提取被禁止的单词,而不是在我的php代码中有一大堆数组 $mtitle = $file['name']; $find = array('fuck', 'fucking', 'etc'); foreach ($find as $n) { if(strpos($mtitle,$n) !== fal

因此,我在joomla根路径中有一个名为
banked.txt的文本文档,其内容如下(在新行中):

现在我已经用下面的代码解决了这个问题。但是,我宁愿从我的
public\uhtml
文件夹中的文本文档中提取被禁止的单词,而不是在我的php代码中有一大堆数组

$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\u html/banked.txt
,并检查该文件,看看是否有匹配的单词会很好:)

Com\u联系人包含三个过滤特定字符串(电子邮件、主题行和消息)的规则,您可以在此处找到它们


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

com_contact包含三条过滤特定字符串(电子邮件、主题行和消息)的规则,您可以在此处找到它们


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

文件是否适合您的目的?正如我们在书中所读到的:

文件-将整个文件读取到一个数组中

因此,使用
文件
您的代码如下所示:

$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
的行发生了更改,因为
文件
正在返回数组

编辑:

似乎
文件
正在拆分仍附加换行符的文件。要忽略它们,必须使用
文件\u忽略\u新行
作为第二个参数。我已经更新了代码来包含它

结果数组中的每一行都将包括行尾,除非 文件\u IGNORE\u使用了新的\u行,因此如果需要,仍然需要使用rtrim() 不希望该行结尾出现


文件是否适合您的目的?正如我们在书中所读到的:

文件-将整个文件读取到一个数组中

因此,使用
文件
您的代码如下所示:

$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
的行发生了更改,因为
文件
正在返回数组

编辑:

似乎
文件
正在拆分仍附加换行符的文件。要忽略它们,必须使用
文件\u忽略\u新行
作为第二个参数。我已经更新了代码来包含它

结果数组中的每一行都将包括行尾,除非 文件\u IGNORE\u使用了新的\u行,因此如果需要,仍然需要使用rtrim() 不希望该行结尾出现


在Windows操作系统中,执行以下操作似乎对我有效。在banked.txt中,我用新行分隔了每个被禁止的单词

banked.txt:

fuck
fucking
etc
PHP:


如果有人对我使用此代码有任何改进或发现任何问题,请说出来。非常感谢关于改进的帮助。

在Windows操作系统中,执行以下操作似乎对我很有效。在banked.txt中,我用新行分隔了每个被禁止的单词

banked.txt:

fuck
fucking
etc
PHP:



如果任何人对我使用此代码有任何改进或发现任何问题,请说出来。非常感谢您提供改进方面的帮助。

Joomla在com_联系人中的文字处理不好,从那里复制代码。看一下ReReplacer@johnny_srereplace是一个扩展,这是一个定制的组件,我需要PHP代码,而不是现有的扩展,我的需求不同。还有,elin你知道我应该查找哪些行号或特定文件来保存对整个组件的搜索吗。@elin你知道我应该查找哪些行号或特定文件来保存对整个组件的搜索吗。看这里,这是筛选特定术语的三条独立规则。Joomla有一个坏词在com_联系人中处理,只需从那里复制代码。查看ReReplacer@johnny_srereplace是一个扩展,这是一个定制的组件,我需要PHP代码,而不是现有的扩展,我的需求不同。另外,elin您知道我在整个组件中保存搜索时应该查找的行号或特定文件吗。@elin您知道我在整个组件中保存搜索时应该查找的行号或特定文件吗。看这里,这是筛选特定术语的三条独立规则。谢谢,但是当我把一个单词放在banked.txt的新行上,并保存或上传一个文件时,它不会检测到这个单词。我怎样才能解决这个问题。如果文件中只有一个单词,它会检测到,但我需要文件中有多个单词:(我把每一个单词都隔成一行。我会用你的代码做一些测试,然后再给你回复。找到了。这都是关于
FILE\u IGNORE\u new\u LINES
参数。我已经更新了我的答案。所以与我的解决方案相比,你知道什么更好用吗?$find=explode(\r\n),FILE\u get\u contents(“c:/website/public\u html/banked.txt”));谢谢,我这样做了,但是当我在banked.txt中的新行中放置一个单词,并且我保存或上载了一个文件时,它不会检测到该单词。如何修复此问题。如果文件中只有一个单词,它会检测到,但我需要文件中的多个单词:(我把每个单词隔在一行。我会用你的代码做一些测试,然后再给你回复。找到了。这都是关于
FILE\u IGNORE\u new\u LINES
参数。我已经更新了我的答案。所以与我的解决方案相比,你知道什么更好用吗?$find=explode(\r\n),FILE\u get\u contents(“c:/website/public\u html/banked.txt”);