Разобрать строку - удалить некоторые слова из строки [дубликат]
На этот вопрос уже есть ответ здесь:
- фильтровать слова в строке в PHP 3 ответа
У меня есть строка типа:
$text = 'Hello this is my string and texts';
У меня есть некоторые недопустимые слова в массиве:
$filtered_words = array(
'string',
'text'
);
Я хочу заменить все отфильтрованные слова в моем $text
на ***
, поэтому я написал:
$text_array = explode(' ', $text);
foreach($text_array as $key => $value){
if(in_array($text_array[$key], $filtered_words)){
$text = str_replace($text_array[$key], '***', $text);
}
}
echo $text;
В Вывод:
Hello this is my *** and texts
Но мне нужна функция, чтобы также заменить texts
на ***
, поскольку она также содержит отфильтрованное слово (текст).
Как я мог бы этого добиться?
Спасибо
2 answers
Вы можете просто сделать это прямо сейчас, str_replace
поддерживает замену из массива в одну строку:
$text = 'Hello this is my string and texts';
$filtered_words = array(
'string',
'texts',
'text',
);
$zap = '***';
$filtered_text = str_replace($filtered_words, $zap, $text);
echo $filtered_text;
Вывод (Демонстрация):
Hello this is my *** and ***
Позаботьтесь о том, чтобы сначала у вас были самые большие слова, и имейте в виду, что когда str_replace
находится в этом режиме, он будет выполнять одну замену за другой - как в вашем цикле. Таким образом, более короткие слова - если раньше - могли бы быть частью более крупных слов.
Если вам нужно что-то более надежное, вы должны сначала рассмотреть возможность проведения текстового анализа. Тот мог бы также сказать вам, если бы вы не знали о словах, которые вы, возможно, хотели бы заменить, но до сих пор не думали об этом.
Str_replace может принимать массив в качестве первого параметра. Так что нет необходимости в каком-либо цикле for each
вообще:
$filtered_words = array(
'string',
'text'
);
$text = str_replace($filtered_words, '***', $text);