多字节字符在编程中可能很棘手。
mbstring 默认情况下不启用。确保您之前阅读过该部分。
文档可以包含多字节字符串。虽然 PHP 有很多有用的字符串帮助器,但这些帮助器根本不适用于多字节字符串。
这可能会导致令人讨厌的错误和其他意外错误,特别是当您计算字符时。
这就是为什么您宁愿在 PHP 中使用多字节字符串函数。
此外,新的多字节字符串函数,例如 mb_trim、mb_ltrim 和 mb_rtrim 将在 8.4(撰写本文时 PHP 的下一个版本)中提供。
英语使用ASCII字符集,因此像r或s这样的字母只需要一个字节。
相反,有些语言使用的字符需要多个字节,例如汉字(最多可达 6 个字节!)。
$strings = [ "?????", "チャーミング", "González", ]; foreach ($strings as $string) { echo 'strlen:' . strlen($string) . ' vs. mb_strlen:' . mb_strlen($string) . PHP_EOL; }
echo strpos("チャーミング", "ャ"); // gives 3 echo mb_strpos("チャーミング", "ャ"); // gives 1 because 1st position is 0
echo substr("チャーミング", 3) . PHP_EOL;// ャーミング echo mb_substr("チャーミング", 3);// ミング
您可能会读到 mbstring 函数可以产生重大影响。
您甚至可以使用以下脚本重现它:
$cnt = 100000; $strs = [ 'empty' => '', 'short' => 'zluty kun', 'short_with_uc' => 'zluty Kun', 'long' => str_repeat('this is about 10000 chars long string', 270), 'long_with_uc' => str_repeat('this is about 10000 chars long String', 270), 'short_utf8' => 'žlutý kůň', 'short_utf8_with_uc' => 'Žlutý kŮň', ]; foreach ($strs as $k => $str) { $a1 = microtime(true); for($i=0; $i来源:PHP 错误
mb_* 函数速度较慢,但这始终是一种权衡,只有上下文才能决定您是否应该使用这些帮助程序还是创建自己的帮助程序。
例如,如果替换 $cnt = 100000;通过 $cnt = 100;在上面的脚本中, mb_* 助手仍然明显较慢,但在您的情况下最终的影响可能很好(例如,0.008 毫秒与 0.004 毫秒)。
包起来
您必须考虑多字节,尤其是在多语言上下文中,PHP 有内置的帮助程序。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3