Intereting Posts
Как сделать NAT с сокетами PHP XML Дополнительный контент в конце документа Как правильно создать функцию для форматирования на PHP в расширении Yii2 Highcharts MySQLi – сервер возвратил неизвестный тип 246 PHP Соответствующие URL-адреса и использование preg_replace_callback () Laravel 5 / Codeception неправильно маршрутизируется Как написать модульные тесты на PHP с процедурной базой кода? regex php – найти вещи в div с определенным идентификатором responseText содержит дополнительные символы пробела (новые строки, строки), как их предотвращать и удалять? Как я могу выполнять сложные ассоциации ассоциаций в доктрине 2? (виртуальный объект) Масштабирование изображения с использованием PHP и поддержание соотношения сторон Подготовить команды в интерактивном режиме CLI Использует ли ключевое слово use в закрытии PHP по ссылке? Как реализовать авторизацию с помощью API Telegram? Проблема, повторяющая HTML со сценарием в ней, нуждающаяся в третьем "

Является ли это эффективным кодированием антиспама?

if(strpos($string, "A Bad Word") != false){ echo 'This word is not allowed'; } if(strpos($string, "A Bad Word") != false){ echo 'This word is not allowed'; } 

Хорошо, поэтому я пытаюсь проверить данные отправки, чтобы увидеть, есть ли недопустимые слова. Вместо того, чтобы делать 5 экземпляров, есть ли более эффективный способ?

Я уверен, что есть более умный способ сделать это в целом.

Если вы просто хотите быть более краткими, то, вероятно, лучше всего перебрать некоторые плохие слова, вместо добавления повторяющихся, почти идентичных условностей (ifs):

 <?PHP $banned = array('bad','words','like','these'); $looksLikeSpam = false; foreach($banned as $naughty){ if (strpos($string,$naugty) !== false){ $looksLikeSpam=true; } } if ($looksLikeSpam){ echo "You're GROSS! Just... ew!"; die(); } 

Edit: Также обратите внимание, что в вашем вопросительном коде вы тестируете strpos! = False. Вы действительно хотите! ==, поскольку strpos () вернет 0, если первое слово, скажем, PENIS. 0 будет изменено на false. Смотрите, куда я пойду?

Кроме того, вы, вероятно, хотите использовать stripos (), чтобы не учитывать регистр (если вам не все равно, если люди SHOUT оскорбительные слова) 🙂

Да, вы можете создать множество багов и создать из него регулярное выражение. Это также облегчило бы обработку данных без учета регистра.

 $badwords = array('staircase', 'tuna', 'pillow'); $badwords_regex = '/' . implode('|', $badwords) . '/i'; $contains_badwords = preg_match($badwords_regex, $text); 

Нет, это дерьмо. Существует целая отрасль вычислительной науки в отношении алгоритмов поиска строк . Хек, Кнут даже посвятил половину 3- го тома TAOCP .

Boyer-Moore – хороший алгоритм, который теперь используется во многих приложениях, связанных с поиском нескольких игл в стоге сена.

Вы должны быть осторожны с границами слов, иначе люди будут жаловаться на то, что не смогут вводить слова типа «волан».

Я надеюсь, что вы (или ваш клиент) понимаете, что автоматическая фильтрация «озорного слова» не устраняет необходимость в модерировании. Есть много способов оскорбить, не используя ни одного из якобы непослушных слов. Даже принятие решения о том, что является или не является оскорбительным, зависит от культурного контекста.

Вы могли бы объединить их как одно регулярное выражение, а затем использовать preg_grep (), чтобы подтвердить их существование

Используйте массив значений и перебирайте массив, проверяя переданное слово каждый раз. Если найденное совпадение выходит из цикла и возвращает true.

Вы можете использовать функцию PHP in_array, а не цикл, если вы проверяете одно слово. Регулярное выражение было бы лучше, если бы вы проверяли целое предложение.

http://us2.php.net/manual/en/function.in-array.php

 $bad_word_array=array('weenis','dolt','wanker'); $passed=in_array($suspected_word,$bad_word_array);