strlen()php函数给出了错误的unicode字符长度

ujv3wf0j  于 2023-05-16  发布在  PHP
关注(0)|答案(4)|浏览(226)

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

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

输出

20

如何判断unicode字符串的长度?

p3rjfoxz

p3rjfoxz2#

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

7eumitmz

7eumitmz3#

作为对其他引用mb_strlen()的答案的补充:
如果php.in设置mbstring.func_overload的第2位设置为1,则strlen将基于默认字符集计算 * 字符 *;否则它将计算字符串中的 * 字节数 *

vsikbqxv

vsikbqxv4#

锁定16小时。此时正在解决disputes about this answer’s content。它目前不接受新的交互。

strlen()没有正确处理多字节字符,因为它假设1个字符等于1个字节,这对于unicode是无效的。此行为为clearly documented
strlen()返回字符串中的字节数而不是字符数
解决方案是使用mb_strlen()函数(mb代表multi byte)(see mb_strlen() docs)。

相关问题