Intereting Posts
Общие вопросы по полному опросу / HTTP-потоку Как получить видеоролик Vine video mysqli :: mysqli (): (HY000 / 2002): Не удается подключиться к локальному серверу MySQL через сокет «MySQL» (2) как установить php cookie с истечением срока действия, и если существует файл cookie, как перенаправить пользователя на другую страницу PHP Как исправить Уведомление: Неопределенная переменная: FOSRestBundle: показать мое пользовательское сообщение об исключении Включение / установка расширения Curl (OSX Server / PHP 5.3.3 / Apache 2.2) Как преобразовать строку в код utf-8 в php пример использования fastcgi_finish_request () как передавать HTTP-аутентификацию с помощью jquery для аутентификации системы входа? Как получить полный URL-адрес в адресной строке с помощью PHP как сделать ссылку для загрузки в PHP? Ток доступа Google OAuth не обновляет токен NULL Нарежьте массив на 4 других массива Идентификация коротких кодов WordPress с использованием регулярного выражения

PHP Замена ругательных слов фразами

Поэтому я понимаю, как заменить определенные слова на другие. Я пытаюсь понять, как взять слово и заменить его фразой и устранить все остальные данные.

Например:

Плохое слово – «собака»

пользовательские входы -> «Вы чувствуете запах как собака».

вместо того, чтобы заменить «собаку» на «радугу» или что-то в этом роде, я хочу, чтобы это звучало так: «Ты гордый рот».

Вот что я имею для кода:

<?php $find = array('dog', 'cat', 'bird'); $replace = 'You are a potty mouth.'; if (isset ($_POST['user_input'])&&!empty($_POST['user_input'])) { $user_input = $_POST['user_input']; $user_input_new = str_ireplace($find, $replace, $user_input); echo $user_input_new; } ?> 

С помощью этого кода это звучит так: «Ты пахнешь, как« Ты горшок ».

Я уверен, что это репост, и я прошу прощения. Все, что мне удалось найти, это документация о том, как заменить только части строк, а не целые.

Ну, в этом случае вы можете просто проверить, есть ли «неправильное слово» в строке ввода пользователя, и если он возвращает true, эхо «Ты гордый рот».

Вы хотели бы использовать strpos ()

например

 if( strpos($_POST['user_input'],'dog')!==FALSE ) { echo('You are a potty mouth'); } 

Если у вас есть массив «плохих слов», вы захотите пропустить их, чтобы проверить, что происходит внутри пользовательского ввода.

Недавно я рассматривал ту же проблему, вот сценарий, над которым я работал, чтобы отфильтровать определенные слова. Все еще выполняется работа, но у нее есть возможность выводить пользовательское сообщение или настраиваемое сообщение. Надеюсь, это поможет вам или направит вас в правильном направлении.

 define("MIN_SAFE_WORD_LIMIT", 3); $safe = true; $whiteList = array(); $blackList = array(); $text = 'Test words fRom a piece of text.'; $blCount = count($blackList); for($i=0; $i<$blCount; $i++) { if((strlen($blackList[$i]) >= MIN_SAFE_WORD_LIMIT) && strstr(strtolower($text), strtolower($blackList[$i])) && !strstr(strtolower($text), strtolower($whiteList[$i]))) { $safe = false; } } if(!$safe) { // Unsafe, flag for action echo 'Unsafe'; } else { echo $text; } 

Вы не хотите заменять плохие слова, но всю строку, поэтому вы должны просто сопоставлять, и если они совпадают, установите целую строку в свою заменяющую строку.

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

Этот простой пример использует границы слов в регулярном выражении для соответствия вашим словам (в примере это было бы в цикле, зацикливаясь на вашем массиве плохих слов):

 foreach ($find as $your_word) { $search = '/\b' . preg_quote($your_word) . '\b/i'; if (preg_match($search, $_POST['user_input']) === 1) { // a match is found, echo or set it to a variable, whatever you need echo $replace; // break out of the loop break; } } 

Heres альтернативное решение, сопоставить слова и заменить на * len str. это не совпадает с такими словами, как Scunthorpe, поскольку использует границы слов. Также вы можете добавить третий параметр, чтобы открыть первые буквы этого слова, чтобы вы знали, какое слово было сказано, не видя его.

 <?php $badwords = array('*c word', '*f word','badword','stackoverflow'); function swear_filter($str,$badwords,$reveal=null) { //Alternatively load from file //$words = join("|", array_filter(array_map('preg_quote',array_map('trim', file('badwords.txt'))))); $words = join("|", array_filter(array_map('preg_quote',array_map('trim', $badwords)))); if($reveal !=null && is_numeric($reveal)){ return preg_replace("/\b($words)\b/uie", '"".substr("$1",0,'.$reveal.').str_repeat("*",strlen("$1")-'.$reveal.').""', $str); }else{ return preg_replace("/\b($words)\b/uie", '"".str_repeat("*",strlen("$1")).""', $str); } } $str="There was a naughty Peacock from Scunthorpe and it said a badword, on stackoverflow"; //There was a naughty Peacock from Scunthorpe and it said ab******, on s************ echo swear_filter($str,$badwords,1); //There was a naughty Peacock from Scunthorpe and it said a *******, on ************* echo swear_filter($str,$badwords); ?>