所以我在我的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
并检查该文件以查看是否有任何匹配的字词会很棒:)
答案 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;
}
}
如果有人有任何改进或看到我使用此代码有任何问题,请说明,所以对改进的帮助表示赞赏。