У меня была рабочая функция, которая получала массив плохих слов и заменяла плохие слова звездочками.
Когда я обновился до PHP7, мне пришлось использовать preg_replace_callback
, поскольку модификатор preg_replace
e
устарел.
Вот как я это использовал:
function filterwords($text){
$filterWords = array("dummy");
$filterCount = sizeof($filterWords);
for($i=0; $i<$filterCount; $i++){
$text = preg_replace('/\b'.$filterWords[$i].'\b/ie',"str_repeat('*',strlen('$0'))",$text);
}
return $text;
}
Вот мой новый код:
echo filterwords("I am a dummy");
function filterwords($text){
$filterWords = array("dummy");
$filterCount = sizeof($filterWords);
for($i=0; $i<$filterCount; $i++){
$text = preg_replace_callback('/\b'.$filterWords[$i].'\b/i',
function ($matches) {
return str_repeat('*',strlen('$0'));
},
$text);
}
return $text;
}
Это выводит "Я **" , но мой желаемый вывод "Я *****" (с 5 звездочками вместо 2).