|
Компьютерная скорая помощь
|
|
| На главную | Контакты | Карта сайта | Регистрация доменов | Cотовая связь | Учебник PHP | Интернет | |
|
| ||||||||||||||||||||||||||||||||||||||||||||||
LIII. Функции мультибайтных строк | ||||||||||||||||||||||||||||||||||||||||||||||
Работающие в PHP кодировки: ISO-8859-*, EUC-JP, UTF-8. Кодировки, НЕ работающие в PHP: JIS, SJIS |
Кодировки символов, не работающие с PHP, могут быть конвертированы с помощью функции конвертации HTTP-ввода/вывода модуля mbstring.
Примечание: SJIS не должна использоваться для внутреннего кодирования, если читатель не знаком достаточно хорошо с вопросами работы разборщика/компилятора и кодирования символов.
Примечание: если вы используете БД с PHP, рекомендуется использовать одну кодировку для БД и internal encoding/внутреннего кодирования для облегчения использования и повышения производительности.
Если вы используете PostgreSQL, он поддерживает кодировки символов, которые отличаются от backend-кодировки. См. детали в учебнике PostgreSQL.
mbstring это модуль расширения. Вы обязаны подключить его скриптом configure. См. детали в разделе Инсталяция.
Следующие опции конфигурации имеют отношение к модулю mbstring:
--enable-mbstring : включает функции mbstring. Эта опция нужна для использования mbstring-функций.
--enable-mbstr-enc-trans : включает конвертацию кодировки символов HTTP-ввода с использованием mbstring-машины конвертации. Если эта возможность включена, кодировка символов HTTP-ввода может быть автоматически конвертирована в mbstring.internal_encoding.
Конвертация кодировки символов HTTP-ввода/вывода может конвертировать также двоичные данные. Пользователям предлагается контролировать конвертацию кодировки символов, если бинарные данные используются для ввода/вывода HTTP.
Если enctype для HTML-формы установлен multipart/form-data, mbstring не конвертирует кодировку символов в POST-данных. Если это так, строки должны конвертироваться во внутреннюю кодировку символов.
HTTP-ввод
Нет способов управлять конвертацией символов HTTP-ввода из PHP-скрипта. Отключение конвертации символов HTTP-ввода нужно сделать в php.ini.
Пример 1. Отключение конвертации символов HTTP-ввода в php.ini
|
При использовании PHP как Apache-модуля можно переопределять PHP ini-установку на уровне Virtual Host в httpd.conf или на уровне директории в .htaccess. Обратитесь к разделу Конфигурация и учебнику Apache.
HTTP-вывод
Есть несколько способов включить конвертацию кодировки символов вывода. Один - это использование php.ini, другой - функция ob_start() с mb_output_handler() как ob_start callback-функция.
Примечание: Для пользователей PHP3-i18n: конвертация вывода mbstring отличается от PHP3-i18n. Кодировка символов конвертируется с использованием буфера вывода.
Пример 3. Пример скрипта
|
В настоящее время модуль 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".
mbstring функции, принимающие имя кодировки, принимают и
"auto".
Если "pass" установлено, никакая конвертация кодировки символов не выполняется.
Если "auto" установлено, оно расширяется до "ASCII,JIS,UTF-8,EUC-JP,SJIS".
См. также mb_detect_order()
Примечание: "поддерживаемые кодировки символов" не означает, что это работает как внутренний код символа.
mbstring.internal_encoding определяет внутреннюю кодировку символов по умолчанию
mbstring.http_input определяет кодировку символов по умолчанию HTTP-ввода
mbstring.http_output определяет кодировку символов по умолчанию HTTP-вывода
mbstring.detect_order определяет порядок определения кодировки символов по умолчанию. См. также mb_detect_order()
mbstring.substitute_character определяет символы для замещения неправильных кодировок символов
Web-браузерам предлагается использовать ту же кодировку при отправку форм. Однако браузеры могут не использовать ту же кодировку символов. См. mb_http_input() для определения кодировки браузера.
Если enctype имеет установленное значение multipart/form-data в HTML-формах, mbstring не конвертирует кодировку символов в POST-данных. Пользователь обязан сделать это в скрипте, если конвертация нужна.
Одновременно браузеры достаточно наворочены, чтобы определять кодировку символов в HTML. charset лучше установить в HTTP-шапке/header. Измените default_charset в соответствии с кодировкой символов.
Пример 4. Установки php.ini
|
Пример 5. Установки php.ini для пользователей EUC-JP
|
Пример 6. Установки php.ini для пользователей SJIS
|
Поскольку большинство приложений 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 функции должны перегружаться. Список перегружаемых функций дан в таблице.
| значение mbstring.func_overload | функция-оригинал | перегруженная функция |
|---|---|---|
| 1 | mail() | mb_send_mail() |
| 2 | strlen() | mb_strlen() |
| 2 | strpos() | mb_strpos() |
| 2 | strrpos() | mb_strrpos() |
| 2 | substr() | mb_substr() |
| 4 | ereg() | mb_ereg() |
| 4 | eregi() | mb_eregi() |
| 4 | ereg_replace() | mb_ereg_replace() |
| 4 | eregi_replace() | mb_eregi_replace() |
| 4 | split() | mb_split() |
Большинство японских символов для своего представления требуют более одного байта на символ. Кроме того, в японском окружении используются разные схемы кодировки. Существуют кодировки EUC-JP, Shift_JIS(SJIS) и ISO-2022-JP(JIS). По мере приобретения популярности Unicode начинает использоваться также UTF-8. при разработке Web-приложений для японской среды важно использовать набор символов, соответствующих текущей задаче - HTTP ввод/вывод, RDBMS и E-mail.
Для хранения символа можно использовать до 6 байтов.
Многобайтный символ обычно в два раза шире однобайтного. Более широкие символы называются "zen-kaku" - что означает "полная ширина", более узкие называются "han-kaku" - что означает "половина ширины". "zen-kaku" имеют обычно фиксированную ширину.
Некоторые кодировки определяют shift(escape)-последовательность для входа/выхода в/из многобайтных строк.
ISO-2022-JP обязан использоваться для SMTP/NNTP.
"i-mode" web-сайт предполагается использовать с SJIS.
Многобайтные кодировки и связанные с ними вопросы очень сложны. Невозможно рассмотреть их здесь достаточно подробно. Дополнительно просмотрите следующие ресурсы.
Unicode/UTF/UCS/etc
http://www.unicode.org/
информация о символах Japanese/Korean/Chinese
ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf
|
| На главную | Карта сайта | Windows 7 | Windows Registry | Stop-экраны | Update for Windows | Файл настроек .htaccess | Всё для мобильного телефона | |
|
|
po gonn © 2004 "JULI'S BEEHIVE" | |
| |