я использую эту функцию, чтобы заменить плохие слова из фраз,
но он хорошо работает с английскими буквами, кроме символов 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;
}
Любые идеи приветствуются.
\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.
Других решений пока нет …