运行时配置

这些函数的行为受 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 中使用的默认国家语言设置 (NLS)。请注意,此选项会自动定义 mbstring.internal_encoding,并且 mbstring.internal_encoding 应在 php.ini 中放置在 mbstring.language 之后。

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 规范,Web 浏览器允许使用与页面使用的字符编码不同的字符编码对要提交的表单进行编码。有关检测浏览器使用的字符编码的信息,请参见 mb_http_input()

虽然流行的浏览器能够对给定 HTML 文档的字符编码进行合理的猜测,但最好通过 header()default_charset ini 设置,在 Content-Type HTTP 标头中将 charset 参数设置为适当的值。

示例 #1 php.ini 设置示例

; Set default language
mbstring.language        = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language        = English; Set default language to English 
mbstring.language        = Japanese; Set default language to Japanese

;; Set default internal encoding
;; Note: Make sure to use character encoding works with PHP
mbstring.internal_encoding    = UTF-8  ; Set internal encoding to UTF-8

;; HTTP input encoding translation is enabled.
mbstring.encoding_translation = On

;; Set default HTTP input character encoding
;; Note: Script cannot change http_input setting.
mbstring.http_input           = pass    ; No conversion. 
mbstring.http_input           = auto    ; Set HTTP input to auto
                                ; "auto" is expanded according to mbstring.language
mbstring.http_input           = SJIS    ; Set HTTP input to SJIS
mbstring.http_input           = UTF-8,SJIS,EUC-JP ; Specify order

;; Set default HTTP output character encoding 
mbstring.http_output          = pass    ; No conversion
mbstring.http_output          = UTF-8   ; Set HTTP output encoding to UTF-8

;; Set default character encoding detection order
mbstring.detect_order         = auto    ; Set detect order to auto
mbstring.detect_order         = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Specify order

;; Set default substitute character
mbstring.substitute_character = 12307   ; Specify Unicode value
mbstring.substitute_character = none    ; Do not print character
mbstring.substitute_character = long    ; Long Example: U+3000,JIS+7E7E

示例 #2 php.ini 设置,适用于 EUC-JP 用户

;; Disable Output Buffering
output_buffering      = Off

;; Set HTTP header charset
default_charset       = EUC-JP    

;; Set default language to Japanese
mbstring.language = Japanese

;; HTTP input encoding translation is enabled.
mbstring.encoding_translation = On

;; Set HTTP input encoding conversion to auto
mbstring.http_input   = auto 

;; Convert HTTP output to EUC-JP
mbstring.http_output  = EUC-JP    

;; Set internal encoding to EUC-JP
mbstring.internal_encoding = EUC-JP    

;; Do not print invalid characters
mbstring.substitute_character = none   

示例 #3 php.ini 设置,适用于 SJIS 用户

;; Enable Output Buffering
output_buffering     = On

;; Set mb_output_handler to enable output conversion
output_handler       = mb_output_handler

;; Set HTTP header charset
default_charset      = Shift_JIS

;; Set default language to Japanese
mbstring.language = Japanese

;; Set http input encoding conversion to auto
mbstring.http_input  = auto 

;; Convert to SJIS
mbstring.http_output = SJIS    

;; Set internal encoding to EUC-JP
mbstring.internal_encoding = EUC-JP    

;; Do not print invalid characters
mbstring.substitute_character = none   

添加备注

用户贡献的备注 3 个备注

ASchmidt at Anamera dot net
6 年前
文档对 "mbstring.language" 有效的 "NLS" 语言字符串的具体内容含糊不清。

根据 https://php.net/manual/en/function.mb-language.php,有效的值是 "Japanese"、"ja"、"English"、"en" 或 UTF-8 的 "uni"。
另一方面,此页面的示例省略了 "uni",但引入了 "Neutral" 作为未记录的选项,这也是默认值。

<?php
var_dump
( mb_language() ); // "neutral" (如果未设置,则为默认值)
var_dump( mb_language( 'uni' ) ); // TRUE,有效的语言字符串
var_dump( mb_language() ); // "uni"
var_dump( mb_language( 'neutral' ) ); // TRUE,有效的语言字符串
var_dump( mb_language() ); // "neutral"
?>
Hayley Watson
6 年前
PHP 脚本中的字符串文字使用与保存 PHP 文件相同的编码进行编码。这不受 default_charset 或其他 .ini 设置的影响。

场景:default_charset 是 KOI8-R,并且有一个包含 KOI8-R 编码字符串 "Это текст для поиска。" 的文本文件 "input.txt"。

编写一个 PHP 脚本
<?php

// mb_internal_encoding('KOI8-R');

$string = 'текст.';

$data = file_get_contents('input.txt');

echo
mb_strpos($data, $string);

?>
但不幸的是,它被保存为 UTF-8。

它不起作用;mb_strpos() 返回 false,因为它无法在 KOI8-R 编码的 "Это текст для поиска。" 中找到 UTF-8 编码的 "текст"。

调整 default_charset 没有任何效果。即使修改 mb_internal_encoding 也无法修复它,仅仅是因为涉及的字符串具有*不同的*编码,而没有实际更改其中一个,它们就不可能匹配。

将源文件重新保存为 KOI8-R 以匹配数据文件,或者将数据文件重新保存为 UTF-8 以匹配源代码。只有这样,脚本才能正确地输出 '4'。
PRETTYGIRL NOT COMe
10 年前
请注意,您最好至少设置 "mbstring.internal_encoding"。

请检查如下

<?php

echo mb_internal_encoding() . '<br />';
echo
mb_regex_encoding();

?>

您可能会对意外的值感到惊讶。

例如。

mbstring.language Japanese
;mbstring.internal_encoding (注释掉,在 phpinfo() 中显示 "no value")

"php.ini" 中这两行与以下内容的值相同

mb_internal_encoding("EUC-JP");
mb_regex_encoding("EUC-JP");

在 Win/Linux 服务器上。

"mbstring.internal_encoding" 定义了 "mb_" 函数(如 "mb_strlen()")的默认编码。

它还定义了 "mb_ereg_" 函数(如 "mb_ereg()")的默认编码,前提是您没有设置 "mb_regex_encoding"。
To Top