我已经设置了一系列被删除的单词,我想检查用户提交的评论是否包含任何这些单词。这样做最有效的方法是什么?到目前为止,我所提出的就是将字符串拆分成一个单词阵列并将其与一系列被删除的单词进行对比,但我觉得有一种更简洁的方法可以做到这一点。
答案 0 :(得分:1)
我会循环显示您的单词数组,并使用strpos查看您正在考虑的单词是否出现在文本中。
答案 1 :(得分:0)
一种简单的方法是使用in_array()函数。
用法:
$censoredWords = array('word1', 'word2', 'word3');
$userSubmited = 'Some word1 and lorem ipsum dolor sid amet';
if ( in_array(explode(' ', $userSubmited), $censoredWords) )
{
// do something
}
您还可以将preg_match()与implode('|', $censoredWords);
一起使用,具体取决于您要实现的目标。
请注意,任何试图检测删失词的方法都可能会产生误报。
控制此操作的最佳方法是使用标记功能并请求访问者的帮助通知主持人。 (因为它是在SO上完成的)
除非你正在编写一个完整的算法,否则它永远不会有效并且仍然会有缺陷。
答案 2 :(得分:0)
最有效的方法是使用数组,但为了提高效率,您必须在提交时进行审查而不显示(如果需要,可以保留原始内容,如果需要另一个数据库)。
这个阵列可以管理&从db,txt文件,php代码等中检索
你可以在这个数组中使用字符串或正则表达式,如果你想审查单词变体,它可能会有所帮助。
对于字符串版本,您可以使用strtr:
$replacement = "****";
$text = strtr($text, array("fuck" => $replacement, "fuckin" => $replacement));
对于regexp版本,请使用preg_replace传递禁用表达式数组
$replacement = "****";
$forbidden = array('/fuck(in|er)/', '/censor(ed|ship)/');
$text = preg_replace($forbidden, $replacement, $text);
您可以使用替换回调来增强替换,以便将明确的***字符数放入已删除的文本中。