PHP Conference Nagoya 2025

Настройка во время выполнения

Поведение функций зависит от установок в файле php.ini.

Опции конфигурации mbstring
Имя По умолчанию Место изменения Список изменений
mbstring.language "neutral" INI_ALL  
mbstring.detect_order NULL INI_ALL  
mbstring.http_input "pass" INI_ALL Устарела
mbstring.http_output "pass" INI_ALL Устарела
mbstring.internal_encoding NULL INI_ALL Устарела
mbstring.substitute_character NULL INI_ALL  
mbstring.func_overload "0" INI_SYSTEM Объявлено устаревшим в PHP 7.2.0; удалено с PHP 8.0.0.
mbstring.encoding_translation "0" INI_PERDIR  
mbstring.http_output_conv_mimetypes "^(text/|application/xhtml\+xml)" INI_ALL  
mbstring.strict_detection "0" INI_ALL  
mbstring.regex_retry_limit "1000000" INI_ALL Доступно, начиная с PHP 7.4.0.
mbstring.regex_stack_limit "100000" INI_ALL Доступно, начиная с PHP 7.3.5.
Дополнительную информацию и определения режимов INI_* даёт раздел «Места установки параметров конфигурации».

Краткое разъяснение конфигурационных директив.

mbstring.language string

По умолчанию в mbstring используются настройки национального языка. Обратите внимание, что эта опция автоматически определяет mbstring.internal_encoding, и mbstring.internal_encoding должен быть помещён после mbstring.language в php.ini

mbstring.encoding_translation bool

Включает прозрачный фильтр кодировки для входящих запросов HTTP, который выполняет обнаружение и преобразование входной кодировки во внутреннюю кодировку.

mbstring.internal_encoding string
Внимание

Функция устарела и ее удалят в будущем.

Определяет внутреннюю кодировку символов по умолчанию.

Пользователи должны оставить эту опцию пустой и задать вместо неё default_charset.

mbstring.http_input string
Внимание

Функция устарела и ее удалят в будущем.

Определяет кодировку символов по умолчанию для HTTP-ввода.

Пользователи должны оставить эту опцию пустой и задать вместо неё default_charset.

mbstring.http_output string
Внимание

Функция устарела и ее удалят в будущем.

Определяет кодировку символов по умолчанию для HTTP-вывода (конвертация из внутренней кодировки в кодировку HTTP вывода произойдёт перед выводом).

Пользователи должны оставить эту опцию пустой и задать вместо неё default_charset.

mbstring.detect_order string

Определяет порядок определения кодировки символов по умолчанию. Смотрите также mb_detect_order().

mbstring.substitute_character string

Определяет символ для замены недопустимых символов кодировки. Список поддерживаемых значений смотрите в описании функции mb_substitute_character().

mbstring.func_overload string
Внимание

Функциональность УСТАРЕЛА с PHP 7.2.0, а в PHP 8.0.0 её УДАЛИЛИ и настоятельно не рекомендовали пользоваться.

Перегружает множество однобайтовых функций аналогами из mbstring. Смотрите раздел Перегрузка функций для получения дополнительной информации.

Эта опция может быть изменена только в файле php.ini.

mbstring.http_output_conv_mimetypes string

mbstring.strict_detection bool

Включает строгое определение кодировки. Смотрите описание и примеры в mb_detect_encoding().

mbstring.regex_retry_limit int

Ограничивает количество обратных ходов, которые могут быть выполнены во время одного совпадения mbregex.

Эта настройка действует только при связывании с oniguruma >= 6.8.0.

mbstring.regex_stack_limit int

Ограничивает глубину стека регулярных выражений mbstring.

Согласно » спецификации HTML 4.01, веб-браузерам разрешено перекодировать данные из формы, которые они получают в кодировке символов, отличной от используемой на странице. Смотрите функцию mb_http_input() для того, чтобы определить кодировку символов, используемую браузерами.

Хотя популярные браузеры способны достаточно точно определить кодировку символов данного HTML-документа, было бы лучше установить параметр charset в HTTP-заголовке Content-Type соответствующим значением с помощью header() или указать требуемое значение в параметре 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

Добавить

Примечания пользователей 2 notes

up
0
ASchmidt at Anamera dot net
6 years ago
The documentation is vague, on WHAT precisely the valid "NLS" language strings are that are valid for "mbstring.language".

According to http://php.net/manual/en/function.mb-language.php 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"
?>
up
0
Hayley Watson
6 years ago
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'.
To Top