Фильтр плохих слов определяет только английские слова, но не русские, как поправить?

Через поиск нашёл вот такой интересный код контактной формы с проверкой на плохие слова. Т.е. при попытке отправить сообщение, в котором имеется плохое слово или слова, выводится сообщение.

Вот часть того кода, где происходит проверка.

$MessageArray = explode(" ", $message);
//Get SPAM words from file and store them in an array
$SpamWords = file_get_contents('spamwords.txt');
$SpamArray = explode("\r\n", $SpamWords);
//Cycle through all the words in the message
foreach($MessageArray as $word){
//Check the word for SPAM words, if it is don't send the email
if(in_array($word, $SpamArray)){
echo '<h1>Spam Guard...';
die();
}
}

Но проблема в том, что воспринимаются корректно только английские слова, а написанные на русском не определяются. Как это исправить?


Ответы (1 шт):

Автор решения: Егор Банин

Файл spamwords.txt должен содержать в том числе и русские слова. Необходимо убедиться, что кодировка spamwords.txt и текста в запросе совпадают (вероятно ваша проблема именно тут). И ещё переносы строк в spamwords.txt должны быть именно \r\n (что не всегда так).

Проверьте кодировку. Посмотрите что происходит в коде: сократите список спам-слов до одного "тест", введите в форму "тест" и сделайте var_dump($MessageArray, $SpamArray).

→ Ссылка