PHP – поддержка многобайтовых безопасных регулярных выражений

PHP поддерживает регулярные выражения тремя способами :

  • POSIX ERE , теперь удаленный в PHP 7+
  • PCRE, который является основным компонентом , но не всегда многобайтным безопасным
  • Multibyte String , которая не включена по умолчанию

Сегодня в Интернете есть Unicode , а PHP тоже с 5,6 из-за i18n . В то время как сам PHP, как известно, ужасно плох в поддержке Unicode, Intl предоставляет доступ к освобождающейся библиотеке ICU .

Чтобы избежать долгого ожидания UString и повторения (и памяти), когда это правильно , я предпочитаю Intl и не оставляю iconv , Multibyte String вместе с DateTime и переписываю большую часть строковых функций SBCS, чтобы быть многобайтовым. В этом процессе возникают некоторые проблемы:

  • Форматирование большого числа форматов большого размера проблематично на 32-битных платформах (например, NAS), когда база данных предлагает хранилище для 64-битных номеров. Его можно решить , используя числа как строку через BCMath .
  • Intl-оболочка не поддерживает функции регулярного выражения ICU, остается вариант Unicode PCRE .

Чтобы использовать PCRE с синтаксисом Unicode , необходимо выполнить компиляцию и настройку PHP в builder для PCRE с поддержкой Unicode. В некоторых системах он не настроен с помощью Unicode, добавляя (*UTF8) до того, как выражение переопределит конфигурацию.

  • я пропустил способ работать с функциями регулярного выражения ICU с PHP?
  • есть ли какие-либо другие ошибки, которые необходимо учитывать для Unicode PCRE?
  • я пропустил причину, по которой следует использовать Multibyte String?