PHP 的 mb_internal_encoding 实际上是做什么的?

2024-05-15

根据 PHP 网站 http://www.php.net/manual/en/function.mb-internal-encoding.php它这样做:

coding 是用于 HTTP 输入的字符编码名称 字符编码转换,HTTP输出字符编码 转换以及字符串函数的默认字符编码 由 mbstring 模块定义。您应该注意到,内部 编码与多字节正则表达式的编码完全不同。

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

  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');

Just:

mb_strtolower($str);

我确实在另一篇 SO 文章中读到 mb_strtolower($str) 不应该被信任,并且您需要为每个多字节字符串函数设置编码。这是真的?


mbstring 扩展添加了一个伟大的想法(</sarcasm>)自动将所有传入数据和所有输出数据从某种编码转换为另一种编码。看mbstring HTTP 输入和输出 http://www.php.net/manual/en/mbstring.http.php。它的配置是mbstring.http_inputini 设置并使用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_strtolowercall 的行为会突然变得非常不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 的 mb_internal_encoding 实际上是做什么的? 的相关文章

随机推荐