#php #arrays #filter #chat #str-replace
#php #массивы #Фильтр #Чат #str-заменить
Вопрос:
У меня проблема в том, что str_replace не может заменить предпоследнее слово … первое слово работает, затем предпоследнее не работает в массиве.. Я попытался ввести сообщение «ducker apple banana chicken» в «chat.php?message=» затем станьте таким:
вывод:
"***er apple banana chicken"
badwords.txt:
duck;
apple;
banana;
chicken;
water;
chat.php
$censoredfilter = file("badwords.txt");
$censoredfilter = implode("n", $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
$message = $_GET['message'];
for($i = 0; $i<sizeof($censoredfilter);$i )
{
$message = str_replace($censoredfilter[$i], "***", $message);
}
Ответ №1:
str_replace(array('things', 'go', 'here'), '', $text)
следует заменить любое значение в массиве, найденное в тексте, на nothing
$censoredfilter = file("badwords.txt");
$censoredfilter = implode("n", $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
str_replace($censoredfilter, '***', $_GET['message']);
Ответ №2:
Неправильного использования implode там нет?
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = explode(";n", $censoredfilter);
Альтернативно,
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = str_replace(array("r", "n"), '', $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
Комментарии:
1. Как сказал @ben ниже, в зависимости от того, какую ОС вы используете или даже какой текстовый редактор вы используете, символами новой строки могут быть либо «n», либо «r». Удаление их обоих просто пытается учесть все ситуации 🙂
Ответ №3:
Чтобы добавить к ответу @dogmatic69, я бы также рассмотрел возможность удаления ; ‘s из вашего badwords.txt файл и сократите код только до этого:
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = explode("n", $censoredfilter);
$message = str_replace($censoredfilter, '***', $_GET['message']);
Также имейте в виду, что если badwords.txt доступно для редактирования любым другим пользователем, их текстовый редактор может использовать разные окончания строк, например r n или r, что приводит к сбою вашего скрипта.
Ответ №4:
Если вы удалите ; альтернативное решение:
$censoredfilter = file("badwords.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$message = str_replace($censoredfilter, '***', $_GET['message']);
Это работает, потому что file()
фактически возвращает файл в массиве. Каждый элемент массива соответствует строке в файле, при этом новая строка все еще прикреплена. Добавление FILE_IGNORE_NEW_LINES
флага удаляет новые строки с конца каждого элемента. Смотрите руководство по php в файле для получения дополнительной информации.
Он также обладает дополнительным преимуществом обработки любого из обычных окончаний строк.