这些 PHP mbstring 设置有什么作用?

我试图弄清楚这些php.ini设置到底是做什么的。当它们设置为不同的值时会发生什么情况?什么时候有必要?它们什么时候是有害的?

像往常一样,PHP手册不太有用。

编辑:只是为了澄清,我了解字符编码的工作原理,并且我了解PHP的多字节函数与单字节对应函数有何不同。我正在寻找有关上述设置的具体细节。

编辑2:好吧,看起来他们实际上确实提供了更多的文档,而不仅仅是运行时配置的页面,它只有一行摘要。其中前三个具有类似名称的函数,并且在描述函数版本的页面上有更多详细信息。我在上面添加了链接。

编辑3:添加赏金。我正在寻找有关这些设置的确切功能的具体细节,尤其是最后三个设置。他们从什么转换到哪里,什么时候转换?


答案 1

您可以将 mbstring.language 更改为您正在使用的任何语言。(来源)

语言

; language for internal character representation.
mbstring.language = Neutral ; Set default language to neutral(UTF-8) (default)
mbstring.language = English
mbstring.language = Japanese
mbstring.language = Korean  ;For Korean market later

http_input

; http input encoding.
mbstring.http_input = pass
mbstring.http_input = auto
mbstring.http_input = UTF-8
mbstring.http_input = UTF-8, SJIS, EUC-JP

http_output

; http output encoding. mb_output_handler must be
; registered as output buffer to function
mbstring.http_output = pass
mbstring.http_output = UTF-8

编码转换

; enable automatic encoding translation accoding to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
mbstring.encoding_translation = On

答案 2

关键是要支持不同的字符集编码。有各种各样的编码(ASCII,ANSI,UTF-8等),每种编码都有不同的字符集和每个字符的字节数。您查看的设置指定了不同 PHP 函数的默认编码。

PHP提供了许多函数,可以帮助您正确处理这些不同的编码。有关插图,请查看 mb_strlen() vs strlen()。

简短的回答是,除非您正在本地化应用程序的文本,或者与具有不同编码的系统(包括您的数据库!)进行通信,否则您可能不必担心它。


推荐