Многобайтови низови функции
В много езици знаците могат да бъдат изразени като един байт. Многобайтовите символни кодове се използват за изразяване на знаци в много други езици. mbstring е проектиран да работи с японски символи. Много функции на mbstring обаче могат да работят с кодировки, различни от японски.
Многобайтовото кодиране на знаци представлява един знак с множество последователни байтове. Някои кодировки имат последователности за изместване (изход) за започване/край на низове от многобайтови знаци. Следователно, многобайтов низ може да бъде прекъснат при разделяне и/или преброяване, освен ако не се използва метод за надеждно кодиране на многобайтови знаци. Този модул предоставя функции за съхранение на многобайтови символи и други помощни функции, като например функции за преобразуване.
Тъй като PHP е основно проектиран за ISO-8859-1, някои многобайтови кодировки не работят добре в PHP. Следователно е важно да зададете mbstring.internal_encoding за кодирането, което работи с PHP.
PHP4 Изисквания за кодиране на знаци
еднобайтовите знаци са в диапазона 00h-7fh, което е съвместимо с ASCII
многобайтово кодиране - извън диапазона 00h-7fh
Ето примери за вътрешни кодировки на знаци, които работят и НЕ работят с PHP.
Кодировките на знаци, които не работят с PHP, могат да бъдат преобразувани с помощта на функцията за HTTP I/O преобразуване на модула mbstring.
Забележка: SJIS не трябва да се използва за вътрешно кодиране, освен ако читателят не е достатъчно запознат с парсер/компилатор и проблеми с кодирането на знаци.
Забележка: Ако използвате DB с PHP, се препоръчва да използвате едно кодиране за DB и вътрешно кодиране залекота на използване и увеличаване на производителността.
Ако използвате PostgreSQL, той поддържа кодировки на знаци, които са различни от кодирането на бекенда. Вижте урока за PostgreSQL за подробности.
mbstring е модул за разширение. Трябва да го активирате със скрипта за конфигуриране. Вижте подробности в секцията Инсталиране.
Следните опции за конфигурация са подходящи за модула mbstring:
--enable-mbstring : Разрешава функциите на mbstring. Тази опция е необходима за използване на функциите mbstring.
--enable-mbstr-enc-trans : Разрешава преобразуването на кодиране на входни HTTP символи с помощта на механизма за преобразуване на mbstring. Ако тази функция е активирана, кодирането на знаци на HTTP вход може автоматично да се преобразува в mbstring.internal_encoding.
Преобразуването на HTTP I/O символно кодиране може също да конвертира двоични данни. От потребителите се иска да контролират преобразуването на кодиране на знаци, ако се използват двоични данни за HTTP I/O.
Ако enctype на HTML формуляра е зададен на multipart/form-data, mbstring не преобразува кодирането на знаци на POST данните. Ако е така, низовете трябва да бъдат преобразувани във вътрешното кодиране на знаци.
Няма начин да контролирате преобразуването на въведени HTTP символи от PHP скрипт. Деактивирането на преобразуването на HTTP входни символи трябва да се извърши в php.ini.
Пример 1: Деактивирайте преобразуването на въведени HTTP символи в php.ini
Когато използвате PHP като Apache модул, можете да замените настройката на PHP ini на ниво виртуален хост в httpd.conf или на ниво директория в .htaccess. Вижте раздела Конфигурация и ръководството за Apache.
Има няколко начина за активиране на преобразуването на кодиране на изходни знаци. Единият използва php.ini, другият е функцияob_start() с mb_output_handler() като функция за обратно извикване ob_start.
Забележка: За потребители на PHP3-i18n: изходното преобразуване на mbstring е различно от PHP3-i18n. Кодирането на знаците се преобразува с помощта на изходния буфер.
Пример 2: настройки на php.ini
Пример 3. Примерен скрипт
Модулът mbstring в момента поддържа следните кодирания на знаци. Кодирането на знаците може да бъде указано чрез параметъра за кодиране на функциите на модула 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-8 8 59-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“.
Забележка: „Поддържани кодировки на знаци“ не означава, че това работи като вътрешен код на знаци.
mbstring.internal_encoding указва вътрешното кодиране на знаци по подразбиране
mbstring.http_input дефинира кодирането на знаци по подразбиране на HTTP вход
mbstring.http_output дефинира кодирането на знаци по подразбиране на HTTP изхода
mbstring.detect_order определя реда, в който се открива кодирането на знаципо подразбиране. Вижте също mb_detect_order()
mbstring.substitute_character дефинира символи, които да заменят невалидни кодирания на знаци
Уеб браузърите се насърчават да използват същото кодиране при изпращане на формуляри. Възможно е обаче браузърите да не използват същото кодиране на знаци. Вижте mb_http_input() за кодиране на браузъра.
Ако enctype е зададен на multipart/form-data в HTML формуляри, mbstring не преобразува кодирането на знаци на POST данните. Потребителят трябва да направи това в скрипта, ако преобразуването е необходимо.
В същото време браузърите са достатъчно умни, за да определят кодирането на знаци в HTML. charset е по-добре да се зададе в HTTP заглавка/заглавка. Променете default_charset, за да съответства на кодирането на символите.
Пример 4. Настройки на php.ini
Пример 5. Настройки на php.ini за потребители на EUC-JP
Пример 6: настройки на php.ini за потребители на SJIS
Претоварване/Претоварване на PHP низови функции с mbstring функции с поддръжка на многобайтови знаци
Тъй като повечето PHP приложения са написани на езици, които използват еднобайтово кодиране на знаци, има някои трудности при работа с многобайтови низове, включително японски. Повечето PHP функции за низове, като substr() , не поддържат многобайтови низове.
Многобайтовото разширение (mbstring) има PHP низови функции, които поддържат многобайтови знаци (например substr() поддържа mb_substr()).
Многобайтовото разширение (mbstring) също така поддържа „претоварване на функции“, за да добави функционалност на многобайтов низ без промяна на кода. Използвайки претоварване на функции, някои PHP функции за низове ще бъдат претоварени с функции за многобайтови низове. Например mb_substr() се извиква вместо substr(),ако претоварването на функцията е разрешено. Претоварването на функции улеснява пренасянето на приложения, като поддържа само еднобайтово кодиране за многобайтови приложения.
Таблица 1. Претоварени функции
1 | поща() | mb_send_mail() |
2 | strlen() | mb_strlen() |
2 | strpos() | mb_strpos() |
2 | strrpos() | mb_strrpos() |
2 | substr() | mb_substr() |
4 | ereg() | mb_ereg() |
4 | ереги() | mb_eregi() |
4 | ereg_replace() | mb_ereg_replace() |
4 | eregi_replace() | mb_eregi_replace() |
4 | разделяне () | mb_split() |
За съхраняване на знак могат да се използват до 6 байта.
Многобайтовият знак обикновено е два пъти по-широк от еднобайтовия знак. По-широките знаци се наричат "дзен-каку" - което означава "пълна ширина", по-тесните се наричат "хан-каку" - което означава "половин ширина". "zen-kaku" обикновено имат фиксирана ширина.
Някои кодировки дефинират последователност за преместване (изход) за влизане/излизане към/от многобайтови низове.
ISO-2022-JP трябва да се използва за SMTP/NNTP.
Уебсайтът "i-mode" трябва да се използва със SJIS.
Информация за японски/корейски/китайски символи