Как заменить символы вне диапазона [0x5E10, 0x7F35] на '*' в PHP? - PullRequest
5 голосов
/ 28 апреля 2010

Я не знаком с тем, как регулярные выражения обрабатывают шестнадцатеричные, кто-нибудь знает?

1 Ответ

15 голосов
/ 28 апреля 2010

Следующее делает трюк:

$str = "some മനുഷ്യന്റെ";

echo preg_replace('/[\x{00ff}-\x{ffff}]/u', '*', $str);
// some **********

echo preg_replace('/[^\x{00ff}-\x{ffff}]/u', '*', $str);
// *****മനുഷ്യന്റെ

Важным является модификатор u (см. здесь ):

Этот модификатор включает дополнительные функциональность PCRE, то есть несовместим с Perl. Шаблон Строки обрабатываются как UTF-8. это модификатор доступен из PHP 4.1.0 или выше в Unix и из PHP 4.2.3 на win32. UTF-8 срок действия шаблон проверен начиная с PHP 4.3.5.

И здесь краткое описание, почему \uFFFF не работает в PHP:

Perl и PCRE не поддерживают \ uFFFF синтаксис. Они используют \ x {FFFF} вместо. Вы можете опустить ведущие нули в шестнадцатеричное число между Фигурные скобки. Поскольку \ x само по себе является недопустимый токен регулярного выражения, \ x {1234} может никогда не путай, чтобы соответствовать \ x 1234 раз. Это всегда соответствует Unicode кодовая точка U + 1234. \ x {1234} {5678} попытаться точно подобрать кодовую точку U + 1234 5678 раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...