PHP中单字节字符串和多字节字符串的区别


PHP difference between Single-byte strings and Multi-byte strings

对于傻瓜来说,在PHP中单字节字符串和多字节字符串之间有什么区别,在哪些情况下我们应该考虑一个或另一个?

对于单字节字符串(例如US-ASCII, ISO 8859系列等)使用对于多字节字符串(例如UTF-8, UTF-16等)使用mb_substr:

// singlebyte strings
$result = substr($myStr, 0, 5);
// multibyte strings
$result = mb_substr($myStr, 0, 5);

例如,如果我计划开发一些东西在中国使用,是否需要因为它们的特殊特性而采取特殊措施?Utf-8编码不够好吗?

函数strlen (Single bytes)返回完整计数字节,函数mb_strlen返回计数字符!

字符长度可以大于1字节(例如UTF-8)。

例如:

$myStr = '៘៥឴ឨឆ';
$result = substr($myStr, 0, 5);
$result = mb_substr($myStr, 0, 5, mb_detect_encoding($myStr));

函数substr在这个例子中返回无效的值,因为字符有更多的一个字节,但函数mb_substr返回正确的数据