utf8字符串长度

时间:2012-11-22 08:45:13

标签: php string utf-8

php中的

strlen()函数无法正确返回字符串长度的utf8字符,例如سلام是4个字符但是在使用strlen后返回8个字符

<?php
echo strlen('سلام');
?>

2 个答案:

答案 0 :(得分:16)

核心PHP字符串函数都假设1个字符= 1个字节。他们没有不同编码的概念。要确定UTF-8字符串中有多少个字符(不是多少个字节),请使用mb_strlen等效字符并告诉它字符串的编码是什么在:

echo mb_strlen('سلام', 'UTF-8');

答案 1 :(得分:4)

您可以在二进制PHP字符串中获取UTF-8代码点的数量(只要它是有效的UTF-8编码)(Demo):

$length = preg_match_all('(.)su', $subject);

如果安装了多字节扩展程序,也可以使用它:

$length = mb_strlen($subject, 'UTF-8');

另请参阅:PHP UTF-8 String Length