Я не знаком с тем, как регулярные выражения обрабатывают шестнадцатеричные, кто-нибудь знает?
Следующее делает трюк:
$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 раз.