function mbstrlen($str,$encoding="utf8") {
$step = $encoding=="utf8"?2:1;
$count = 0;//字数
$strlen = strlen($str);
for($i=0;$i<$strlen;$i++){
$count++;
if(ord($str{$i})>=128){
$i=$i+$step;
}
}
return $count;
}解析:mb_strlen我们一般用来统计一个字符串中的"字数",大家知道strlen()函数只能获得字符串的长度而不是字数。
比如
$str = "我爱TP";
echo mb_strlen($str,"UTF-8");//输出4
echo strlen($str);//输出8,一个utf8汉字占3个字节长度当mb_strlen没有开启时(这是一个扩展函数,不是php默认支持的),可以用我们上面的函数替代:echo mbstrlen($str);//输出4默认是utf8编码的,如果是gbk字符集,可以这样:echo mbstrlen($str,'gbk');//输出4所用到的核心原理就是 ord() 返回字符的ascii码,而汉字由多个字节组成,并且每个字节的ascii码都在128以上,所以我们只要获取每个字节的ascii码,判断它是否在128以上,是的话就根据编码往前跳过几个字节(UTF8是3,gbk是2)。这样最终就可以获得实际的字数。=====
但是经楼主考察,这种方式可能只能对中英文混合并且不带特殊字符的字符串准确。当然网上有更好的替代方法,比如用正则统计。
最佳答案