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

2022-08-30 18:15:17

我正在尝试获取此 unicode 字符串的长度

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

输出

20

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


答案 1

strlen()没有正确处理多字节字符,因为它假设 1 个字符等于 1 个字节,这对于 unicode 来说是无效的。此行为已明确记录

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

解决方案是使用函数( 代表 ) (参见 mb_strlen() docs)。mb_strlen()mbmulti byte

编辑

如果由于任何原因无法/无法更改代码,则可能需要确保字符串函数由多字节对应项自动重载:

若要使用函数重载,请在 php 中将 mbstring.func_overload.ini设置为一个正值,该值表示指定要重载的函数类别的位掩码组合。应将其设置为 1 以重载 mail() 函数。2 表示字符串函数,4 表示正则表达式函数。例如,如果设置为 7,则邮件、字符串和正则表达式函数将被重载。

PHP 支持此功能,并在此处进行了记录(请注意,此功能在 PHP 7.2 及更高版本中已弃用)。

请注意,您可能还需要编辑您的模块,以确保启用mb_string模块。此处记录了可用设置。php.ini


答案 2

您正在寻找mb_strlen


推荐