单字节字符串和多字节字符串之间的PHP差异

时间:2014-05-23 05:41:45

标签: php

对于假人来说,在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编码足够好吗?

1 个答案:

答案 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返回了正确的数据。