Помнить, что все, что вам нужно сделать в PHP, чтобы заставить его работать должным образом с Юникодом, слишком сложно, утомительно и подвержено ошибкам, поэтому я ищу способ заставить PHP магически обновиться абсолютно все, что возможно, от затхлого старого байтового режима ASCII до современного символьного режима Unicode, все сразу и с помощью одного простого объявления.
Идея состоит в том, чтобы модернизировать PHP-скрипты для работы с Unicode без необходимости загромождать исходный код кучей запутанных альтернативных вызовов функций и специальных регулярных выражений. Все должно просто «Делать правильные вещи» с Unicode, без вопросов.
Учитывая, что целью является максимальная уникальность с минимальной суетой, эта декларация должна как минимум делать эти вещи (плюс все, что я забыл, что способствует достижению общей цели):
Источник сценария PHP сам по себе считается в UTF ‑ 8 (например, строки и регулярные выражения).
Все входные и выходные данные автоматически преобразуются в / из UTF ‑ 8 по мере необходимости и с возможностью нормализации (например, все входные данные нормализуются к NFD и все выходные данные нормализуются к NFC).
Все функции с версиями Unicode используют их вместо (например, Collator::sort
для sort
).
Все байтовые функции (например, strlen
, strstr
, strpos
и substr
) работают как соответствующие символьные функции (например, mb_strlen
, mb_strstr
, mb_strpos
, и mb_substr
).
Все регулярные выражения и функции регулярных выражений прозрачно работают на Unicode (то есть, как и все преггеры, неявно привязаны к /u
, а такие вещи, как \w
и \b
и \s
все работают на Unicode способ Unicode Standard требует их для работы , и т. Д.)
Для дополнительного кредита :), я хотел бы, чтобы был способ "обновить" это объявление до режима полной графемы. Таким образом, байтовые или символьные функции становятся функциями графемы (например, * 1061). *, grapheme_strstr
, grapheme_strpos
и grapheme_substr
), а регулярные выражения работают на правильных графемах (т. Е. .
- или даже [^abc]
- соответствует кластеру графических символов Unicode независимо от того, сколько кодовых точек оно содержит и т. д.).