Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Меняемо | Список изменений |
---|---|---|---|
mbstring.language | "neutral" | PHP_INI_ALL | Доступна начиная с PHP 4.3.0.; PHP_INI_PERDIR в PHP <= 5.2.6 |
mbstring.detect_order | NULL | PHP_INI_ALL | Доступна начиная с PHP 4.0.6. |
mbstring.http_input | "pass" | PHP_INI_ALL | Доступна начиная с PHP 4.0.6. |
mbstring.http_output | "pass" | PHP_INI_ALL | Доступна начиная с PHP 4.0.6. |
mbstring.internal_encoding | NULL | PHP_INI_ALL | Доступна начиная с PHP 4.0.6. |
mbstring.script_encoding | NULL | PHP_INI_ALL | Доступна начиная с PHP 4.3.0. |
mbstring.substitute_character | NULL | PHP_INI_ALL | Доступна начиная с PHP 4.0.6. |
mbstring.func_overload | "0" | PHP_INI_SYSTEM | PHP_INI_SYSTEM в PHP <= 4.2.3; PHP_INI_SYSTEM | PHP_INI_PERDIR с PHP 4.3 по 5.2.6. Доступна начиная с PHP 4.2.0. |
mbstring.encoding_translation | "0" | PHP_INI_PERDIR | Доступна начиная с PHP 4.3.0. |
mbstring.strict_detection | "0" | PHP_INI_ALL | Доступна начиная с PHP 5.1.2. |
Краткое разъяснение конфигурационных директив.
-
mbstring.language
string -
По умолчанию в mbstring используются настройки национального языка. Обратите внимание, что эта опция автоматически определяет mbstring.internal_encoding, и mbstring.internal_encoding должен быть помещен после mbstring.language в php.ini
-
mbstring.encoding_translation
boolean -
Включает прозрачный фильтр кодировки для входящих запросов HTTP, который выполняет обнаружение и преобразование входной кодировки во внутреннюю кодировку.
-
mbstring.internal_encoding
string -
Определяет внутреннюю кодировку символов по умолчанию.
-
mbstring.http_input
string -
Определяет кодировку символов по умолчанию для HTTP-ввода.
-
mbstring.http_output
string -
Определяет кодировку символов по умолчанию для HTTP-вывода.
-
mbstring.detect_order
string -
Определяет порядок определения кодировки символов по умолчанию. См. также mb_detect_order().
-
mbstring.substitute_character
string -
Определяет символ для замены недопустимых символов кодировки.
-
mbstring.func_overload
string -
Перегружает множество однобайтовых функций аналогами из mbstring. Смотрите раздел Перегрузка функций для получения дополнительной информации.
-
mbstring.strict_detection
boolean -
Позволяет строгое определение кодировки.
Согласно » спецификации HTML 4.01, веб-браузерам позволяется перекодировать данные из формы, которые они получают в кодировке символов, отличной от используемой на странице. Смотрите функцию mb_http_input() для того, чтобы определить кодировку символов, используемую браузерами.
Хотя популярные браузеры способны достаточно точно определить кодировку символов данного HTML-документа, было бы лучше установить параметр charset в поле Content-Type HTTP-заголовка в требуемое значение или указать ее в параметре default_charset в ini-настройках.
Пример #1 Примеры настроек php.ini
; Установить язык по умолчанию mbstring.language = Neutral; Установить Neutral(UTF-8) языком по умолчанию(по умолчанию) mbstring.language = English; Установить английский языком по умолчанию mbstring.language = Japanese; Установить японский языком по умолчанию ;; Установить внутреннюю кодировку по умолчанию ;; Примечание: Убедитесь, что используете кодировку символов, которая работает с PHP mbstring.internal_encoding = UTF-8 ; Установить внутреннюю кодировку в UTF-8 ;; Включено преобразование кодировки HTTP-ввода. mbstring.encoding_translation = On ;; Установить кодировку символов по умолчанию для HTTP-ввода ;; Примечание: Скрипт не может изменить установку http_input. mbstring.http_input = pass ; Нет преобразования. mbstring.http_input = auto ; Установить HTTP-ввод в auto ; "auto" расширяется в соответствии с mbstring.language mbstring.http_input = SJIS ; Установить HTTP-ввод в SJIS mbstring.http_input = UTF-8,SJIS,EUC-JP ; Указать порядок ;; Установить кодировку символов по умолчанию для HTTP-вывода mbstring.http_output = pass ; Нет преобразования. mbstring.http_output = UTF-8 ; Установить кодировку HTTP-вывода в UTF-8 ;; Установить порядок определения кодировки символов по умолчанию mbstring.detect_order = auto ; Установить порядок определения в auto mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Указать порядок ;; Установить символ замены по умолчанию mbstring.substitute_character = 12307 ; Указать значение Unicode mbstring.substitute_character = none ; Не печатать символ mbstring.substitute_character = long ; Примеры кодовых значений символов: U+3000,JIS+7E7E
Пример #2 Настройки php.ini для пользователей EUC-JP
;; Отключить буферизацию вывода output_buffering = Off ;; Установить кодировку в http-заголовке default_charset = EUC-JP ;; Установить японский языком по умолчанию mbstring.language = Japanese ;; Включено преобразование кодировки HTTP-ввода. mbstring.encoding_translation = On ;; Установить перекодировку HTTP-ввода в auto mbstring.http_input = auto ;; Конвертировать HTTP-вывод в EUC-JP mbstring.http_output = EUC-JP ;; Установить внутреннюю кодировку в EUC-JP mbstring.internal_encoding = EUC-JP ;; Не печатать недопустимые символы mbstring.substitute_character = none
Пример #3 Настройки php.ini для пользователей SJIS
;; Включить буферизацию вывода output_buffering = On ;; Установить mb_output_handler для включения перекодировки вывода output_handler = mb_output_handler ;; Установить кодировку в http-заголовке default_charset = Shift_JIS ;; Установить японский языком по умолчанию mbstring.language = Japanese ;; Установить перекодировку HTTP-ввода в auto mbstring.http_input = auto ;; Конвертировать в SJIS mbstring.http_output = SJIS ;; Установить внутреннюю кодировку в EUC-JP mbstring.internal_encoding = EUC-JP ;; Не печатать недопустимые символы mbstring.substitute_character = none
Коментарии
String literals in the PHP script are encoded with the same encoding that the PHP file was saved with. This is not affected by default_charset or other .ini settings.
Scenario: The default_charset is KOI8-R, and there is a text file "input.txt" containing the string "Это текст для поиска." in KOI8-R encoding.
A PHP script is written:
<?php
// mb_internal_encoding('KOI8-R');
$string = 'текст.';
$data = file_get_contents('input.txt');
echo mb_strpos($data, $string);
?>
But unfortunately it was saved as UTF-8.
It doesn't work; mb_strpos() returns false because it can't find the UTF-8-encoded "текст" inside the KOI8-R-encoded "Это текст для поиска.".
Adjusting the default_charset had no effect. Not even fiddling with mb_internal_encoding could fix it, simply because the strings involved had *different* encodings and without actually changing one of them they just weren't going to match.
Either re-save the source file as KOI8-R to match the data file, or re-save the data file as UTF-8 to match the source code. Only then will the script properly echo '4'.
The documentation is vague, on WHAT precisely the valid "NLS" language strings are that are valid for "mbstring.language".
According to function.mb-language the values are "Japanese", "ja", "English", "en", or "uni" for UTF-8.
On the other hand, the sample on this current page omits "uni" but introduces "Neutral" as an undocumented option - which is also the default value:
<?php
var_dump( mb_language() ); // "neutral" (default if not set)
var_dump( mb_language( 'uni' ) ); // TRUE, valid language string
var_dump( mb_language() ); // "uni"
var_dump( mb_language( 'neutral' ) ); // TRUE, valid language string
var_dump( mb_language() ); // "neutral"
?>