0

我正在制作一个 Badword 过滤器,如果它们是字符串中的坏词,则返回 true。但是发生的事情是无论用户编写代码都返回false。

我已经尝试将参数转换stripos()为字符串(以防万一),但仍然如此。我试过preg_match()"/$word/i", $_POST['message']

这是我的检查功能:

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即使我只从bannedwods列表中输入一个badword,也总是返回false......

4

1 回答 1

3

默认情况下,由返回的字符串file()在每行末尾包含换行符。所以$word以换行符结尾,并且仅当坏词位于行尾时才会匹配。

使用FILE_IGNORE_NEW_LINES标志删除换行符。

$bannedwords = file("bannedwords", FILE_IGNORE_NEW_LINES);

一旦找到匹配项,您还应该跳出循环,无需继续检查其他单词。

于 2020-02-12T19:25:14.477 回答