关于mbstring的一些问题处理
2011-01-26 12:07
309 查看
一、关于mbstring多字节字符串处理模块的相关设置
今天正好在网上看到一篇关于如何设置mbstring系列函数为php默认使用函数的一篇文章
,顺便也就仔细看了看php.ini中mbstring部分的设置参数。mbstring系列函数在涉及到中文及其它亚洲字符集的开发中是经常使用的,研究一下还是有必要的。
先说文章中提及的一个参数:mbstring.func_overload。这个参数的好处
在于当你已经开发了大量程序后发现需要处理多字节字符集的时候,不可能将之前的程序全部检查,将相关函数替换成mbstring多字节字符处理函数。这个
时候你可以通过设置这个参数来使php默认使用mbstring系列函数来重载替代相对应的php内置函数(例如常用的substr()会被自动替换为
mb_substr())。有5个可选值:
0:代表不重载任何函数(默认值);
1:代表重载mail()函数;
2:代表重载str系列字符串处理函数;
4:代表重载ereg系列正则处理函数;
7:代表重载所有以上提及的函数。
不过在php手册中也提及了这么一句:
It is not recommended to use the function
overloading option in the per-directory context, because it’s not
confirmed yet to be stable enough in a production environment and may
lead to undefined behaviour.
哈哈,慎用慎用,毕竟这么强大无视的参数还是谨慎使用为好,影响太大。打开后影响的函数列表如下:
mail() -> mb_send_mail()strlen() ->
mb_strlen()strpos() -> mb_strpos()strrpos() ->
mb_strrpos()substr() -> mb_substr()strtolower() ->
mb_strtolower()strtoupper() -> mb_strtoupper()substr_count() ->
mb_substr_count()ereg() -> mb_ereg()eregi() ->
mb_eregi()ereg_replace() -> mb_ereg_replace()eregi_replace() ->
mb_eregi_replace()split() -> mb_split()
接下来几个参数也简略介绍一下,自己看注释理解的,可能有误:
mbstring.language:设置默认语言。默认值为neutral,就是UTF-8,这样就不错。
mbstring.internal_encoding:设置默认的内部编码。如果设置过mbstring.language,必须放置在之后,不然无法覆盖之前的设置。默认值NULL。
mbstring.http_input:默认的http输入编码。默认值pass,就是不处理。
mbstring.http_output:默认的http输出编码,前提是必须将output_buffering打开并将output_handler设置为mb_output_handler。默认值pass,也是不处理。
mbstring.encoding_translation:打开后将会自动将输入编码转换为internal_encoding所指定的编码(同样慎用,都交给机器未必是好事)。默认值Off,万幸。
mbstring.detect_order:设置编码的检测顺序,在使用mb_detect_encoding而又没有在第二个参数中指明检测
编码顺讯列表时,将会以这里设置的为准。默认值auto,在language为neutral时也就是代表检测顺序为(ASCII, UTF-8)。
mbstring.substitute_character:当编码无法转换时的处理方式。默认值为NULL,也就是不显示无法转换的字符。你也可以设置为long,显示字符的hex编码;或者指定其他特定字符(例如”@_@”,呵呵)。
mbstring.strict_detection:是否打开严格的编码检测模式,这个找了半天才知道什么意思,在处理有不同编码或错误编码字
符混杂情况(例如mb_detect_encoding(”testä”))下打开这个参数能够防止mb_detect_encoding返回错误的编
码。可以参见PHP Bug
24309
。默认值为Off。
mbstring.script_encoding:PHP脚本的默认编码。默认值为NULL。
大多数情况下默认值好像工作的就挺好,而且最好程序中也不要显式依赖于ini设置。使用mbstring系列函数时明确指明编码类型也许是一种更好的处理方式。在Unicode情况下,可以考虑设置为以下形式。
mbstring.language =
neutralmbstring.internal_encoding = UTF-8mbstring.encoding_translation =
Offmbstring.http_input = autombstring.http_output =
UTF-8mbstring.detect_order = autombstring.substitute_character = none
=================================
二、drupal的mbstrinmg:
注意
mbstring.http_output = pass
今天正好在网上看到一篇关于如何设置mbstring系列函数为php默认使用函数的一篇文章
,顺便也就仔细看了看php.ini中mbstring部分的设置参数。mbstring系列函数在涉及到中文及其它亚洲字符集的开发中是经常使用的,研究一下还是有必要的。
先说文章中提及的一个参数:mbstring.func_overload。这个参数的好处
在于当你已经开发了大量程序后发现需要处理多字节字符集的时候,不可能将之前的程序全部检查,将相关函数替换成mbstring多字节字符处理函数。这个
时候你可以通过设置这个参数来使php默认使用mbstring系列函数来重载替代相对应的php内置函数(例如常用的substr()会被自动替换为
mb_substr())。有5个可选值:
0:代表不重载任何函数(默认值);
1:代表重载mail()函数;
2:代表重载str系列字符串处理函数;
4:代表重载ereg系列正则处理函数;
7:代表重载所有以上提及的函数。
不过在php手册中也提及了这么一句:
It is not recommended to use the function
overloading option in the per-directory context, because it’s not
confirmed yet to be stable enough in a production environment and may
lead to undefined behaviour.
哈哈,慎用慎用,毕竟这么强大无视的参数还是谨慎使用为好,影响太大。打开后影响的函数列表如下:
mail() -> mb_send_mail()strlen() ->
mb_strlen()strpos() -> mb_strpos()strrpos() ->
mb_strrpos()substr() -> mb_substr()strtolower() ->
mb_strtolower()strtoupper() -> mb_strtoupper()substr_count() ->
mb_substr_count()ereg() -> mb_ereg()eregi() ->
mb_eregi()ereg_replace() -> mb_ereg_replace()eregi_replace() ->
mb_eregi_replace()split() -> mb_split()
接下来几个参数也简略介绍一下,自己看注释理解的,可能有误:
mbstring.language:设置默认语言。默认值为neutral,就是UTF-8,这样就不错。
mbstring.internal_encoding:设置默认的内部编码。如果设置过mbstring.language,必须放置在之后,不然无法覆盖之前的设置。默认值NULL。
mbstring.http_input:默认的http输入编码。默认值pass,就是不处理。
mbstring.http_output:默认的http输出编码,前提是必须将output_buffering打开并将output_handler设置为mb_output_handler。默认值pass,也是不处理。
mbstring.encoding_translation:打开后将会自动将输入编码转换为internal_encoding所指定的编码(同样慎用,都交给机器未必是好事)。默认值Off,万幸。
mbstring.detect_order:设置编码的检测顺序,在使用mb_detect_encoding而又没有在第二个参数中指明检测
编码顺讯列表时,将会以这里设置的为准。默认值auto,在language为neutral时也就是代表检测顺序为(ASCII, UTF-8)。
mbstring.substitute_character:当编码无法转换时的处理方式。默认值为NULL,也就是不显示无法转换的字符。你也可以设置为long,显示字符的hex编码;或者指定其他特定字符(例如”@_@”,呵呵)。
mbstring.strict_detection:是否打开严格的编码检测模式,这个找了半天才知道什么意思,在处理有不同编码或错误编码字
符混杂情况(例如mb_detect_encoding(”testä”))下打开这个参数能够防止mb_detect_encoding返回错误的编
码。可以参见PHP Bug
24309
。默认值为Off。
mbstring.script_encoding:PHP脚本的默认编码。默认值为NULL。
大多数情况下默认值好像工作的就挺好,而且最好程序中也不要显式依赖于ini设置。使用mbstring系列函数时明确指明编码类型也许是一种更好的处理方式。在Unicode情况下,可以考虑设置为以下形式。
mbstring.language =
neutralmbstring.internal_encoding = UTF-8mbstring.encoding_translation =
Offmbstring.http_input = autombstring.http_output =
UTF-8mbstring.detect_order = autombstring.substitute_character = none
=================================
二、drupal的mbstrinmg:
[mbstring] ; language for internal character representation. ; http://php.net/mbstring.language mbstring.language = neutral ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) ; http://php.net/mbstring.internal-encoding mbstring.internal_encoding = UTF-8 ; http input encoding. ; http://php.net/mbstring.http-input mbstring.http_input = pass ; http output encoding. mb_output_handler must be ; registered as output buffer to function ; http://php.net/mbstring.http-output mbstring.http_output = pass ; enable automatic encoding translation according 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. ; http://php.net/mbstring.encoding-translation mbstring.encoding_translation = Off ; automatic encoding detection order. ; auto means ; http://php.net/mbstring.detect-order mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another ; http://php.net/mbstring.substitute-character ;mbstring.substitute_character = none; ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions ; http://php.net/mbstring.func-overload ;mbstring.func_overload = 0 ; enable strict encoding detection. ;mbstring.strict_detection = Off ; This directive specifies the regex pattern of content types for which mb_output_handler() ; is activated. ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml/+xml) ;mbstring.http_output_conv_mimetype= ; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte ; Default: "" ;mbstring.script_encoding=
注意
mbstring.http_output = pass
相关文章推荐
- 关于一些很平常的错误原因(个人的一些问题和怎么处理的)
- 关于异常的处理一些问题之我见
- 关于中文hook的一些问题的处理
- 关于处理PHP json_encode返回的json数据一些小问题
- 关于JSF2中自定义组件处理表单值的一些问题
- 关于在Mysql服务启动的一些现象及问题和处理过程
- 关于myhabits一些异常以及处理问题
- 关于Android23 及以上模拟器处理应用闪退的一些问题(权限相关)
- 关于网上一些兼容性问题的处理总结
- 关于FastJson的一些问题的处理(时间问题 ,转换json重用对象引用问)
- 关于C/C++发送到打印机的一些问题处理
- 关于C语言字符串Dddi DdD的一些问题处理
- 关于android视频播放显示区域不正常的问题,一些处理方法
- 关于应用程序从AppStore上更新的一些问题处理
- 关于python处理作Excel文件的一些问题,包括时间处理 (转)
- 关于python处理作Excel文件的一些问题,包括时间处理 (转)
- 关于cloudstack中遇见的一些问题处理笔记
- 安卓开发中关于软键盘处理的一些问题
- 关于WM_CTLCOLOREDIT的处理的一些问题
- 关于合理使用SpringMVC统一异常处理机制以改善代码风格的一些思考