В последнее время я получаю много спама из моей контактной формы, поэтому я решил добавить немного проверки в часть «сообщение» формы. Я написал функцию, которая, как я думал, будет работать, чтобы отсеять наиболее часто используемые слова, которые я вижу в своих спам-сообщениях, из формы, но она всегда возвращает false, когда я ее запускаю.
Вот функция:
function spamCheck($input) {
$flags = array('cialis', 'viagra', 'erection', 'pharmac', 'porn', 'anal', 'bondage', 'insurance', 'ringtone', 'poker', 'casino', 'gambl', 'whore', 'nipple', 'shit', 'realt', 'shemale', 'valium');
$input = explode(' ', $input);
foreach($input as $word) {
$word = trim($word, '",.!?\';:*');
foreach($flags as $flag) {
if(strpos(strtolower($word), $flag)) {
return $word;
exit;
}
}
}
return false;
}
Вы заметите, что некоторые слова в черном списке не заполнены. Например, «gambl», которое может быть отправлено по электронной почте как «gambling», или «gamble», или «gambler», или «gambles», или «gambled». Вот почему я использовал strpos() внутри цикла foreach, чтобы он соответствовал частичным строкам, а не только точным строкам.
Любые идеи, что вызывает этот сбой?
$input
это массив? Кроме того, вам не нужноexit
послеreturn
. - person   schedule 06.01.2014$input = explode(' ', $input);
не заметил, поэтому и задал глупый вопрос. - person   schedule 06.01.2014if(strpos(strtolower($word), $flag) !== false)
и посмотрите, работает ли это. - person   schedule 06.01.2014