Я запускаю веб-приложение PHP / MySQL, где пользователи могут публиковать контент. Из-за спама я пытаюсь заблокировать загрузчики спам-текста с помощью ключевых слов.
Спаммер, как правило, вводит номер WhatsApp, который у меня есть в черном списке. Недавно он поместил пробелы в число, и поэтому моя логика больше не работает.
например:.

Моя система обнаруживает info
даже как часть Infos
, но не число, которое определяется как ключевое слово спама, просто без пробелов.
Соответствующая строка следующего кода:
$pos = stripos($data['txt'], $findme);
Весь код:
# Check for spam keywords
// get the keywords from the black list
$stmt="
SELECT
keyword,
weight
FROM
$DB.$T16
";
$result = execute_stmt($stmt, $link);
while ($row = db_get_row($result)){
$keyword[] = $row->keyword;
$weight[] = $row->weight;
};
$num_results = db_numrows($result);
if(!isset($spam['score'])) $spam['score'] = 0;
if(!isset($spam_level)) $spam_level = 0;
for ($i=0;$i<$num_results;$i++){
$findme = $keyword[$i];
$pos = stripos($data['txt'], $findme);
$pos2 = stripos($data['title'], $findme);
if ($pos !== false OR $pos2 !== false){ // this seems to be spam!
$spam_level += $weight[$i];
$triggered_keywords .= $keyword[$i].', ';
#echo $spam_level.':'.$keyword[$i].$br;
}
}
$spam['score'] += $spam_level;
Это работает, если число является ключевым словом. Например. +47179339393. Но поскольку спаммер теперь входит в +47 17 93 39 39 3 и его разновидности, он терпит неудачу.
Как я могу изменить функцию stripos, чтобы убедиться, что все варианты +47179339393 будут распознаны?