PHP的mb_internal_encoding实际上做了什么?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP的mb_internal_encoding实际上做了什么?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
According to the PHP website它这样做:

有人可以用更简单语解释一下吗?

> HTTP输入字符编码转换
> HTTP输出字符编码转换
>字符串函数认字符编码
>“内部编码与多字节正则表达式完全不同”是什么意思

我的猜测是

>表示GET和POST被视为该编码.
>表示它输出到该编码.
>表示它对所有多字节字符串函数使用该编码.
>我不知道.为什么正则表达式与普通字符串函数不同?

如果第2点是正确的,你需要这样做:

ini_set('default_charset','UTF-8');

如果我理解正确,这意味着如果你这样做:

mb_internal_encoding('UTF-8')

你不需要这样做:

mb_strtolower($str,'UTF-8');

只是:

mb_strtolower($str);

我确实读过另一个SO帖子,mb_strtolower($str)不应该被信任,你需要为每个多字节字符串函数设置编码.这是真的?

mbstring扩展添加了光荣的想法(< / sarcasm>),以自动将所有传入数据和所有输出数据从某些编码转换为另一种编码.请参见 mbstring HTTP Input and Output.它使用Mbstring.http_input ini设置并使用mb_output_handler进行配置. mb_internal_encoding会影响此转换. IMO你应该关掉那些设置而不要碰它们;我还没有找到任何可以通过优雅方式解决的问题,并且总体来说隐藏编码转换是一个糟糕的想法.特别是如果它全部通过在各种不同的上下文中使用的一个全局标志(mb_internal_encoding)来控制.
那是1.和2.

对于3.,的确如此,mb_internal_encoding基本上为接受$encoding参数的所有mb_函数设置认值.本质上它只是设置一个全局变量(内部),其他函数读取,这就是全部.

最后一部分指的是有一个单独的mb_regex_encoding函数来设置mb_ereg_函数的内部编码.

我同意这一点,因为所有的全球国家都不可信任.这是非常值得信赖的:

mb_internal_encoding('UTF-8');
mb_strtolower($string);

但是,这不是真的:

mb_strtolower($string);

看到不同?如果您依赖于在其他地方正确设置全局状态,您永远无法确定它实际上是否正确.你只需要调用一些第三方库,在你不知道的情况下将mb_internal_encoding设置为其他东西,你的mb_strtolower调用会突然表现得非常不同.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP的mb_internal_encoding实际上做了什么?全部内容,希望文章能够帮你解决PHP的mb_internal_encoding实际上做了什么?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。