我正在做一个Badword的过滤器,如果他们是字符串中的一个坏词,就会返回true。但实际情况是,无论用户编写什么代码,都会返回false。
我已经尝试将stripos()的参数转换为字符串(以防万一),但仍然如此。我在"/$word/i", $_POST['message']中尝试了preg_match()
下面是我的检查函数:
function MessageBad(){
$BadWord = false;
$bannedwords = file("bannedwords");
foreach($bannedwords as $word) {
if(stripos($_POST['message'], $word) !== false){
$BadWord = true;
}
}
return $BadWord;
}但是stripos($_POST['message'], $word) !== false总是返回false,即使我只从bannedwods列表中输入了一个不好的词...
发布于 2020-02-13 03:25:14
默认情况下,file()返回的字符串在每行的末尾包含换行符。因此,$word以换行符结尾,并且只有在坏字位于行尾时才会匹配。
使用FILE_IGNORE_NEW_LINES标志删除换行符。
$bannedwords = file("bannedwords", FILE_IGNORE_NEW_LINES);一旦找到匹配的单词,你也应该跳出这个循环,没有必要一直检查其他单词。
https://stackoverflow.com/questions/60195468
复制相似问题