我正在尝试获取这个Unicode字符字符串的长度
$text = 'نام سلطان م';
$length = strlen($text);
echo $length;
输出
20
它如何确定Unicode字符字符串的长度?
strlen()
不正确地处理多字节字符,因为它假定一个字符等于一个字节,这对于 Unicode 来说是无效的。这种行为已经清楚地记录:
strlen() 返回字符串中字节数而不是字符数。
解决方法是使用 mb_strlen()
函数(mb
代表 multi byte
)(请参阅 mb_strlen() 文档)。
strlen
函数并不计算字符的个数,而是计算字节数。对于多字节字符,它将返回更高的数字。
使用mb_strlen()
代替可以计算实际字符数量。
关于其他提到 mb_strlen()
的答案,我想补充一点:
如果 php.in
设置中的 mbstring.func_overload
的第二位设置为 1,则 strlen
函数将根据默认字符集计算字符串的 字符 数量;否则它将计算字符串中的 字节数。
mb_
-> 请参见 http://php.net/manual/en/mbstring.overload.php,但这取决于 PHP 配置,因此如果您无法确保以其他方式使用它,则直接使用mb_
可能更好。 - Marcin Orlowskioverload
,我完全忽略了它。干杯! - Iliastrlen
和mb_strlen
之间的差异给我们带来了巨大的错误。当我们使用strlen
时,我们发现一些发送带有Unicode字符的短信消息的客户被多收费了。小心啊,各位,不要陷入我们曾经遇到的同样的陷阱。 - Moses Ndeda