我试图得到这个unicode字符串的长度
$text = 'نام سلطان م'; $length = strlen($text); echo $length;
输出
20
如何判断unicode字符串的长度?
f87krz0w1#
您正在寻找mb_strlen。
mb_strlen
p3rjfoxz2#
函数strlnen不计算字符数,而是计算字节数。对于多字节字符,它将返回更大的数字。使用mb_strlen()来计算实际的字符数。
strlnen
mb_strlen()
7eumitmz3#
作为对其他引用mb_strlen()的答案的补充:如果php.in设置mbstring.func_overload的第2位设置为1,则strlen将基于默认字符集计算 * 字符 *;否则它将计算字符串中的 * 字节数 *
php.in
mbstring.func_overload
strlen
vsikbqxv4#
锁定16小时。此时正在解决disputes about this answer’s content。它目前不接受新的交互。
strlen()没有正确处理多字节字符,因为它假设1个字符等于1个字节,这对于unicode是无效的。此行为为clearly documented:strlen()返回字符串中的字节数而不是字符数。解决方案是使用mb_strlen()函数(mb代表multi byte)(see mb_strlen() docs)。
strlen()
mb
multi byte
4条答案
按热度按时间f87krz0w1#
您正在寻找
mb_strlen
。p3rjfoxz2#
函数
strlnen
不计算字符数,而是计算字节数。对于多字节字符,它将返回更大的数字。使用
mb_strlen()
来计算实际的字符数。7eumitmz3#
作为对其他引用
mb_strlen()
的答案的补充:如果
php.in
设置mbstring.func_overload
的第2位设置为1,则strlen
将基于默认字符集计算 * 字符 *;否则它将计算字符串中的 * 字节数 *vsikbqxv4#
锁定16小时。此时正在解决disputes about this answer’s content。它目前不接受新的交互。
strlen()
没有正确处理多字节字符,因为它假设1个字符等于1个字节,这对于unicode是无效的。此行为为clearly documented:strlen()返回字符串中的字节数而不是字符数。
解决方案是使用
mb_strlen()
函数(mb
代表multi byte
)(see mb_strlen() docs)。