对于假人来说,在PHP中,单字节字符串和多字节字符串之间的区别是什么,在哪种情况下我们应该考虑一个或另一个?
对于单字节字符串(例如US-ASCII,ISO 8859系列等)使用 substr和多字节字符串(例如UTF-8,UTF-16等)使用 mb_substr:
// singlebyte strings $result = substr($myStr, 0, 5); // multibyte strings $result = mb_substr($myStr, 0, 5);
例如,如果我计划在中国开发一些东西,我是否需要采取任何特殊措施,因为它们具有特殊性质? Isnt'Utf-8编码足够好吗?
答案 0 :(得分:2)
函数strlen
(单字节)返回完整计数字节,函数mb_strlen
返回计数字符!
char可以有一个超过1个字节(例如UTF-8)。
对于你的例子:
$myStr = '៘៥឴ឨឆ';
$result = substr($myStr, 0, 5);
$result = mb_substr($myStr, 0, 5, mb_detect_encoding($myStr));
此示例中的函数substr
返回无效值,因为字符具有更多的一个字节,但函数mb_substr返回了正确的数据。