我正在尝试获取此unicode字符串的长度
$text = 'نام سلطان م';
$length = strlen($text);
echo $length;
输出
20
如何确定unicode字符串的长度?
答案 0 :(得分:26)
strlen()
没有正确处理多字节字符,因为它假定1个字符等于1个字节,这对于unicode来说是无效的。此行为是clearly documented:
strlen()在字符串中返回字节数而不是字符数。
解决方案是改为使用mb_strlen()
函数(mb
代表multi byte
)(see mb_strlen() docs)。
编辑
如果出于任何原因无法改变代码,可能需要确保字符串函数由多字节对应项自动重载:
要使用函数重载,请将php.ini中的mbstring.func_overload设置为 一个正值,表示指定的位掩码组合 要重载的函数类别。它应该设置为1到 重载mail()函数。 2表示字符串功能,4表示常规功能 表达功能。例如,如果设置为7,则为mail,strings 正则表达式函数将被重载。
这得到了PHP和documented here的支持(注意它自PHP 7.2以来已被弃用)。
请注意,您可能还需要编辑php.ini
以确保启用了mb_string模块。可用设置为documented here。
答案 1 :(得分:2)
您正在寻找mb_strlen
。
答案 2 :(得分:1)
函数strlnen
不计算字符数,而是计算字节数。对于多字节字符,它将返回更高的数字
请改用mb_strlen()
来计算实际的字符数。
答案 3 :(得分:0)
正如引用mb_strlen()
的其他答案的附录:
如果php.in
设置mbstring.func_overload
将位2设置为1,则strlen
将根据默认字符集计算字符;否则它将计算字符串