根据 PHP 网站 http://www.php.net/manual/en/function.mb-internal-encoding.php它这样做:
coding 是用于 HTTP 输入的字符编码名称
字符编码转换,HTTP输出字符编码
转换以及字符串函数的默认字符编码
由 mbstring 模块定义。您应该注意到,内部
编码与多字节正则表达式的编码完全不同。
有人可以用简单的术语解释一下吗?
- HTTP输入字符编码转换
- HTTP输出字符编码转换
- 字符串函数的默认字符编码
- “内部编码与多字节正则表达式的编码完全不同”是什么意思?
我的猜测是
- 意味着 GET 和 POST 被视为该编码。
- 意味着它输出到该编码。
- 意味着它对所有多字节字符串函数使用该编码。
- 我不知道。为什么正则表达式与普通字符串函数不同?
如果第 2 点正确,您需要执行以下操作:
ini_set('default_charset', 'UTF-8');
如果我正确理解 3 这意味着如果你这样做:
mb_internal_encoding('UTF-8')
你不需要做:
mb_strtolower($str, 'UTF-8');
Just:
mb_strtolower($str);
我确实在另一篇 SO 文章中读到 mb_strtolower($str) 不应该被信任,并且您需要为每个多字节字符串函数设置编码。这是真的?
mbstring 扩展添加了一个伟大的想法(</sarcasm>
)自动将所有传入数据和所有输出数据从某种编码转换为另一种编码。看mbstring HTTP 输入和输出 http://www.php.net/manual/en/mbstring.http.php。它的配置是mbstring.http_input
ini 设置并使用mb_output_handler
. mb_internal_encoding
影响这种转换。在我看来,你应该关闭这些设置并且永远不要碰它们;我还没有找到任何可以通过此方法优雅解决的问题,总体而言,进行隐式编码转换听起来是一个糟糕的想法。特别是如果它全部通过一个全局标志控制(mb_internal_encoding
),用于各种不同的上下文。
这就是 1 和 2。
对于3.,确实如此,mb_internal_encoding
基本上为所有设置默认值mb_
接受一个函数$encoding
范围。本质上,它只是设置一个全局变量(内部),其他函数可以从中读取,仅此而已。
最后一部分指的是有一个单独的事实mb_regex_encoding http://www.php.net/manual/en/function.mb-regex-encoding.php设置内部编码的函数mb_ereg_
功能。
我确实在另一篇帖子上读到过mb_strtolower($str)
不应该被信任,并且您需要为每个多字节字符串函数设置编码。这是真的?
我同意这一点,因为所有全球国家都不可信。这个还是蛮靠谱的:
mb_internal_encoding('UTF-8');
mb_strtolower($string);
然而,这并不是真的:
mb_strtolower($string);
看到不同?如果您依赖于其他地方正确设置的全局状态,您永远无法确定它实际上is正确的。您只需要调用一些第三方库即可mb_internal_encoding
在你不知情的情况下进行其他事情,并且你的mb_strtolower
call 的行为会突然变得非常不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)