gpt4 book ai didi

php - PHP 的 mb_internal_encoding 究竟做了什么?

转载 作者:可可西里 更新时间:2023-11-01 12:35:33 26 4
gpt4 key购买 nike

According to the PHP website它这样做:

encoding is the character encoding name used for the HTTP input character encoding conversion, HTTP output character encoding conversion, and the default character encoding for string functions defined by the mbstring module. You should notice that the internal encoding is totally different from the one for multibyte regex.

谁能用更简单的术语解释一下?

  1. HTTP输入字符编码转换
  2. HTTP输出字符编码转换
  3. 字符串函数的默认字符编码
  4. “内部编码与多字节正则表达式的编码完全不同”是什么意思?

我的猜测是

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

如果第 2 点是正确的,您需要执行以下操作:

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

如果我正确理解 3 是否意味着如果您这样做:

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影响这种转化。在我看来,您应该关闭这些设置并且永远不要触摸它们;我还没有找到任何可以通过这个优雅地解决的问题,并且进行隐式编码转换听起来总体上是一个糟糕的主意。特别是如果它全部通过一个全局标志 ( mb_internal_encoding ) 控制,该标志用于各种不同的上下文。
所以这是 1. 和 2.

对于 3.,的确如此,mb_internal_encoding基本上为所有 mb_ 设置默认值接受 $encoding 的函数范围。本质上它只是设置一个全局变量(内部),其他函数从中读取,仅此而已。

最后一部分提到了一个事实,即有一个单独的 mb_regex_encoding mb_ereg_ 设置内部编码的函数功能。

I did read on another SO post that mb_strtolower($str) should no be trusted and that you need to set the encoding for each multibyte string function. Is this true?

只要所有全局状态都不可信任,我同意这一点。这是非常值得信赖的:

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

然而,这并不是真的:

mb_strtolower($string);

看出区别了吗?如果您依赖于在其他地方正确设置的全局状态,您永远无法确定它实际上是否正确。您只需要调用一些设置 mb_internal_encoding 的第三方库在你不知情的情况下,还有你的mb_strtolower电话会突然表现得非常不同。

关于php - PHP 的 mb_internal_encoding 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com