Помогите со спам-фильтром (решено)

  • Автор темы orohimaru2
  • 25
  • Обновлено
  • 13, May 2024
  • #1
При этом будут отмечены слова «ставки», «азартные игры», «xxx», но не будут отмечены слова «ставки», «азартные игры», «XXX».

Я бы хотел, чтобы он отмечал все варианты этих слов (т. е. Ставки, СТАВКИ, СТАВКИ и т. д. и т. п.). Разумеется, я могу перечислить их все по отдельности, но мне хотелось бы каким-то образом сопоставить их, чтобы были помечены все варианты этих слов.

 
$original = $_POST['message'];
$spamw = array('betting', 'gambling', 'xxx');

foreach ( $spamw as $num ) {

if ( ( $pos = strpos( $original, $num ) ) !== false ) {

$err = 'Something went wrong. Please, try again.';

}
}
Код (разметка):

orohimaru2


Рег
31 Jan, 2015

Тем
1

Постов
3

Баллов
13
  • 08, Jun 2024
  • #2
Просто небольшое примечание: То, как вы ищете запрещенные слова, в некоторых случаях может вызвать ложные срабатывания. Например, предположим, что вы добавляете слово секс к списку запрещенных слов. Теперь попробуйте отправить текст "Мне нравится громкая секс-музыка" и посмотрите, что произойдет - это будет помечено как спам. Это всего лишь простой пример, но я надеюсь, что вы уловили идею. Как только вы начнете добавлять больше слов в список запрещенных слов, количество ложных срабатываний увеличится.
 

dimulka2


Рег
23 Nov, 2010

Тем
2

Постов
4

Баллов
24
  • 10, Jun 2024
  • #3
С preg_match:
 
$spamw = array('betting', 'gambling', 'xxx');
$original = $_POST['message'];

foreach ($spamw as $num) {

if (preg_match("/\b$num\b/i", $original)) {

$err = 'Something went wrong. Please, try again.';

}
}
Код (разметка):
 

sborbaz


Рег
31 Jul, 2014

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно