| ||||||||||||||||||||||||||||||||||||||||||||||
LIII. Функции мультибайтных строкВведениеВо многих языках символы могут выражаться одним байтом. Многобайтные коды
символов используются для выражения символов многих других языков. Многобайтная кодировка символов представляет один символ несколькими последовательными байтами. Некоторые кодировки имеют shift(escape)-последовательности для начала/окончания строк многобайтных символов. Следовательно, многобайтная строка может быть разрушена при разделении и/или обсчёте, если не использовать метод надёжного кодирования многобайтных символов. Данный модуль предоставляет функции сохранения много байтных символов и другие вспомогательные функции, такие как функции конвертации. Поскольку PHP в основе своей разработан для ISO-8859-1, некоторые многобайтные кодировки плохо работают в PHP. Следовательно, важно устанавливать mbstring.internal_encoding для кодировки, работающей с PHP. Требования Кодировки Символов PHP4
Вот примеры внутренней кодировки символов, которые работают и НЕ работают с PHP.
Кодировки символов, не работающие с PHP, могут быть конвертированы с помощью функции конвертации HTTP-ввода/вывода модуля mbstring.
Как подключить mbstringmbstring это модуль расширения. Вы обязаны подключить его скриптом configure. См. детали в разделе Инсталяция. Следующие опции конфигурации имеют отношение к модулю mbstring:
HTTP ввод и выводКонвертация кодировки символов HTTP-ввода/вывода может конвертировать также двоичные данные. Пользователям предлагается контролировать конвертацию кодировки символов, если бинарные данные используются для ввода/вывода HTTP. Если enctype для HTML-формы установлен multipart/form-data, mbstring не конвертирует кодировку символов в POST-данных. Если это так, строки должны конвертироваться во внутреннюю кодировку символов.
Поддерживаемые кодировки символовВ настоящее время модуль mbstring поддерживает нижеследующие кодировки символов. Кодировка символов может быть специфицирована параметром encoding функций модуля mbstring. Вот кодировки, поддерживаемые данным расширением PHP: UCS-4, UCS-4BE, UCS-4LE, UCS-2, UCS-2BE, UCS-2LE, UTF-32, UTF-32BE, UTF-32LE, UCS-2LE, UTF-16, UTF-16BE, UTF-16LE, UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, ISO-2022-JP, JIS, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, ISO-8859-13, ISO-8859-14, ISO-8859-15, byte2be, byte2le, byte4be, byte4le, BASE64, 7bit, 8bit и UTF7-IMAP. Вхождение в php.ini, принимающее имя кодировки,
принимает также "auto" и "pass". Если "pass" установлено, никакая конвертация кодировки символов не выполняется. Если "auto" установлено, оно расширяется до "ASCII,JIS,UTF-8,EUC-JP,SJIS". См. также mb_detect_order()
Установки php.ini
Web-браузерам предлагается использовать ту же кодировку при отправку форм. Однако браузеры могут не использовать ту же кодировку символов. См. mb_http_input() для определения кодировки браузера. Если enctype имеет установленное значение multipart/form-data в HTML-формах, mbstring не конвертирует кодировку символов в POST-данных. Пользователь обязан сделать это в скрипте, если конвертация нужна. Одновременно браузеры достаточно наворочены, чтобы определять кодировку символов в HTML. charset лучше установить в HTTP-шапке/header. Измените default_charset в соответствии с кодировкой символов.
Перегрузка/Overload строковых функций PHP mbstring-функциями с поддержкой многобайтных символовПоскольку большинство приложений PHP написаны на языках, использующих однобайтную кодировку символов, имеются некоторые трудности при работе с многобайтными строками, в том числе с японскими. Большинство строковых PHP-функций, таких как substr(), не поддерживают многобайтные строки. Многобайтное расширение (mbstring) имеет строковые РНР-функции с поддержкой многобайтных символов (например, substr() поддерживает mb_substr()). Многобайтное расширение (mbstring) также поддерживает 'перегрузку функций' для добавления функциональности многобайтных строк без модификации кода. Используя перегрузку функций, некоторые строковые функции PHP будут перегружены многобайтными строковыми функциями. Например, mb_substr() вызывается вместо substr(), если перегрузка функций включена. Перегрузка функций облегчает перенос приложений, поддерживая только однобайтные кодировки для многобайтных приложений. mbstring.func_overload в php.ini должно иметь некоторое положительное значение для использования перегрузки функций. Это значение должно специфицировать категорию перегружающей функции: 1 включает перегрузку функции mail; 2 - строковые функции, 4 - функции регулярных выражений. Например, если установлена 7, mail, strings и regex функции должны перегружаться. Список перегружаемых функций дан в таблице. Таблица 1. Перегружаемые функции
Основы многобайтной японской кодировки символовБольшинство японских символов для своего представления требуют более одного байта на символ. Кроме того, в японском окружении используются разные схемы кодировки. Существуют кодировки EUC-JP, Shift_JIS(SJIS) и ISO-2022-JP(JIS). По мере приобретения популярности Unicode начинает использоваться также UTF-8. при разработке Web-приложений для японской среды важно использовать набор символов, соответствующих текущей задаче - HTTP ввод/вывод, RDBMS и E-mail.
СсылкиМногобайтные кодировки и связанные с ними вопросы очень сложны. Невозможно рассмотреть их здесь достаточно подробно. Дополнительно просмотрите следующие ресурсы.
| ||||||||||||||||||||||||||||||||||||||||||||||
|