Strlen () PHP函数给出错误的unicode字符长度


strlen() php function giving the wrong length of unicode characters

我试图得到这个unicode字符字符串的长度

$text = 'نام سلطان م';
$length = strlen($text);
echo $length;

输出
20

如何确定unicode字符串的长度?

strlen()不能正确处理多字节字符,因为它假设1个字符等于1个字节,这对于unicode来说是无效的。这种行为有清晰的文档记录:

strlen()返回字节数,而不是字符串中字符数。

解决方案是使用mb_strlen()函数代替(mb代表multi byte)(参见mb_strlen()文档)。

您要找的是mb_strlen

函数strlnen不计算字符数,而是计算字节数。对于多字节字符,它将返回更高的数字。
使用mb_strlen()来计算字符的实际数目。

作为参考mb_strlen():

的其他答案的补充

如果php.in设置mbstring.func_overload将位2设置为1,则strlen将根据默认字符集计数字符;否则,它将计算字符串

中的字节数。