我试图获得这个unicode字符串的长度
$text = '??? ????? ?';
$length = strlen($text);
echo $length;
Run Code Online (Sandbox Code Playgroud)
产量
20
Run Code Online (Sandbox Code Playgroud)
它如何确定unicode字符串的长度?
Mar*_*ski 27
strlen()没有正确处理多字节字符,因为它假设1个字符等于1个字节,这对于unicode是无效的.此行为已明确记录:
strlen的()返回的字节的数目,而不是字符数在字符串.
解决方案是使用mb_strlen()函数代替(mb代表multi byte)(参见mb_strlen()docs).
编辑
如果由于任何原因无法/可行地更改代码,可能需要确保字符串函数由多字节对应项自动重载:
要使用函数重载,请将php.ini中的mbstring.func_overload设置为一个正值,该值表示指定要重载的函数类别的位掩码组合.它应设置为1以重载mail()函数.2表示字符串函数,4表示正则表达式函数.例如,如果将其设置为7,则将重载邮件,字符串和正则表达式函数.
这是由PHP支持并在此处记录的(注意它自PHP 7.2以来已被弃用).
请注意,您可能还需要编辑php.ini以确保启用了mb_string模块.此处记录了可用的设置.
| 归档时间: |
|
| 查看次数: |
11284 次 |
| 最近记录: |