preg_replace не работает правильно с UTF-8 символов?

я использую эту функцию, чтобы заменить плохие слова из фраз,
но он хорошо работает с английскими буквами, кроме символов UTF-8.

я нашел это \b Граница не работает должным образом с UTF-8 символов.
Есть ли альтернативный способ сделать это?

мне пришлось добавить ‘\ b’, так как мне нужно заменить только точное слово.
как пример: не хочу заменять popo_one с p***o мне нужно только заменить popo с p***o, надеюсь понятно понятно.

public function wordfilter($phrase) {
$filter = array('/popo\b/i','/blabla\b/i');
$replace = array('p***o','b***a');
$newphrase = preg_replace($filter, $replace, $phrase);
return $newphrase;
}

Любые идеи приветствуются.

0

Решение

\b (граница слова) является пределом между символом из \w класс символов и другой символ или предел строки (начало или конец).

По умолчанию \w содержит только [a-zA-Z0-9_], но если вы используете модификатор u \w Класс символов будет содержать все буквы и цифры Unicode (и будет эквивалентен [\p{L}\p{N}_]). Так что с этим модификатором значение \b тоже изменится.

Модификатор u имеет второй эффект. При этом шаблон и строка объекта больше не рассматриваются как строки ascii, а как строки utf8.

Модификатор u представляет собой комбинацию двух директив: (*UCP) что меняет смысл сокращенных классов символов (\w, \d, \s…) а также (*UTF8) это делает строки шаблона и темы для чтения как строки utf8. Эти директивы могут быть помещены непосредственно в шаблон в самом начале вместо использования модификатора u.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]