Вопрос

В PHP нет многобайтовых функций preg, означает ли это, что все функции preg_functions по умолчанию безопасны для МБ?В документации PHP не нашел упоминаний.

Это было полезно?

Решение

PCRE может поддерживать UTF-8 и другие кодировки Unicode, но это необходимо указать во время компиляции.Из Справочная страница для PCRE 8.0:

Текущая реализация PCRE примерно соответствует Perl 5.10, включая поддержку строк в кодировке UTF-8 и свойств общей категории Unicode.Однако поддержка UTF-8 и Unicode должна быть явно включена;это не значение по умолчанию.Таблицы Юникода соответствуют версии Юникода 5.1.

PHP в настоящее время использует ПКРЕ 7.9;ваша система может иметь более старую версию.

Взглянув на PCRE библиотека который поставляется с PHP 5.2, похоже, он настроен для поддержки свойств Unicode и UTF-8.То же самое для 5.3 филиал.

Другие советы

pcre поддерживает utf8 «из коробки», см. документацию по модификатору «u».

Иллюстрация (\xC3\xA4 — кодировка utf8 немецкой буквы «ä»)

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

это повторяет "@@¤@", потому что "\xC3" и "\xA4" рассматривались как отдельные символы

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

(обратите внимание на «u») печатает «@@@», потому что «\xC3\xA4» рассматривалось как одна буква.

Нет, они не.Посмотреть вопрос preg_match и UTF-8 в PHP например.

Нет, вам нужно использовать многобайтовые строковые функции нравиться mb_ereg

Некоторые из моих более сложных функций предварительной подготовки:

(1a) проверьте имя пользователя как буквенно-цифровое + подчеркивание:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username) 

(1b) возможная альтернатива UTF:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username) 

(2a) подтвердить адрес электронной почты:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))

(2b) возможная альтернатива UTF:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3a) нормализовать новые строки:

preg_replace("/(\n){2,}/","\n\n",$str);

(3b) возможная альтернатива UTF:

preg_replace("/(\n){2,}/u","\n\n",$str);

Эти изменения выглядят хорошо?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top