strlen() php 函数给出错误的 unicode 字符长度
我正在尝试获取此 unicode 字符串的长度
$text = 'نام سلطان م';
$length = strlen($text);
echo $length;
输出
20
它如何确定 unicode 字符串的长度?
我正在尝试获取此 unicode 字符串的长度
$text = 'نام سلطان م';
$length = strlen($text);
echo $length;
输出
20
它如何确定 unicode 字符串的长度?
strlen()
没有正确处理多字节字符,因为它假设 1 个字符等于 1 个字节,这对于 unicode 来说是无效的。此行为已明确记录:
strlen() 返回字节数,而不是字符串中的字符数。
解决方案是使用函数( 代表 ) (参见 mb_strlen() docs)。mb_strlen()
mb
multi byte
编辑
如果由于任何原因无法/无法更改代码,则可能需要确保字符串函数由多字节对应项自动重载:
若要使用函数重载,请在 php 中将 mbstring.func_overload.ini设置为一个正值,该值表示指定要重载的函数类别的位掩码组合。应将其设置为 1 以重载 mail() 函数。2 表示字符串函数,4 表示正则表达式函数。例如,如果设置为 7,则邮件、字符串和正则表达式函数将被重载。
PHP 支持此功能,并在此处进行了记录(请注意,此功能在 PHP 7.2 及更高版本中已弃用)。
请注意,您可能还需要编辑您的模块,以确保启用mb_string模块。此处记录了可用设置。php.ini