$str ="1234北京北京";
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 12,换一下$str ="1234北上广深";
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 9,再换一下$str ="1234樊人樊人";
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 10
如何解释?编程环境Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 12,换一下$str ="1234北上广深";
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 9,再换一下$str ="1234樊人樊人";
echo strlen($str)."<hr>";
echo mb_strlen($str);返回12 10
如何解释?编程环境Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12
strlen = 16
mb_strlen = 8
或者用 echo mb_internal_encoding(); 打印一下
你就会发现至少有一个是 utf-8
也就是说,你的 mbstring 默认处理的字符集是 utf-8但是你示例的代码是 gbk 的,于是就出现了
12 12
12 9
12 10
这样的结果即,你把 gbk 编码当做 utf-8 编码处理了。其中不符合 utf-8 编码规则的字节组合被丢弃了
strlen — 获取字符串长度
int strlen ( string $string )
返回给定的字符串 string 的长度。mb_strlen
int mb_strlen ( string $str [, string $encoding ] )
返回给定的字符串 string 的长度。
encoding参数为字符编码。如果省略,则使用内部字符编码。在strlen计算时,对待一个UTF8的中文字符是3个长度,例如“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,如“中文a字1符”长度是6 .