我正在尝试实现在堆栈溢出中找到的一些代码,其中包含垃圾邮件过滤器。当我只是输入垃圾邮件单词时,该功能会起作用,但是当我在垃圾邮件单词之前输入一堆文本时,它就会通过。我检查了来源,我一定遗漏了一些东西,有人可以帮忙吗?
代码是:
function strpos_arr($haystack, $needle) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $what) {
if(($pos = strpos($haystack, $what))!==false) return $pos;
}
return false;
}
我这样调用它的函数是:
if(strpos_arr($text, $bad_words)) {
return false;
} else {
return true;
}
该数组只是一个简单的数组,其中有很多不好的单词,如下所示:
$bad_words = array(
'bad word 1',
'bad word 2');
原文链接:Using an array as needles in strpos
谢谢
最佳答案
首先,看来你的逻辑是错误的。我认为:
if(strpos_arr($text, $bad_words)) {
return false;
} else {
return true;
}
应该是:
if (strpos_arr($text, $bad_words)) {
return TRUE;
} else {
return FALSE;
}
然后,如果发现错误的单词,您将返回 $pos
。如果 $pos
碰巧为零,则下一次检查将失败。除非你需要知道坏词在文本中的位置,否则我会将其更改为:
if (($pos = strpos($haystack, $what)) !== FALSE) return TRUE;
关于php - 检查字符串是否包含垃圾邮件单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26360201/