2012-11-22 136 views
4

strlen()功能在PHP不能正确地返回UTF8字符的字符串lenght,例如سلام为4字符,但使用的strlen这就是后返回8种字符UTF8字符串长度

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

2 ?!它应该是* 8 *。 – deceze

回答

13

核心PHP字符串功能的全部假设1个字符= 1个字节。他们没有不同的编码概念。为了弄清楚有多少字符是一个UTF-8字符串(不多少字节),使用相当于mb_strlen,并告诉它什么编码字符串是:

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

你可以得到数的二进制PHP字符串中的UTF-8编码点(只要它是有效的UTF-8编码)(Demo):

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

您也可以使用多字节扩展,如果你把它安装:

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

另请参阅:PHP UTF-8 String Length

+0

实际上是否存在mb *不可用的系统?说实话,我还没有看到一个。 :) – deceze

+0

说实话,我见过一些。但这不应该在这种情况下造成任何困难。 – hakre