php > echo mb_strlen($s,utf8);
2
utf8返回2,我理解
php > echo mb_strlen($s,gb2312);
4
这里返回4,我也理解
php > echo mb_strlen($s,gbk);
3
这里我就不理解了?
回复内容: php > $s=你好;
php > echo mb_strlen($s,utf8);
2
utf8返回2,我理解
php > echo mb_strlen($s,gb2312);
4
这里返回4,我也理解
php > echo mb_strlen($s,gbk);
3
这里我就不理解了?
因为$s是utf8编码,你没有转成gbk就通过gbk的编码获取它的长度。
utf8编码的你好在gbk上是浣犲ソ,所以它的长度是3呀。
应该这么干:
$a = mb_strlen(iconv( 'utf-8','gbk', $s), 'gbk');$b = mb_strlen(iconv( 'utf-8','gb2312', $s), 'gb2312');
也就是,gb2312也是错的。
mb_strlen 是返回字符数,所以只有返回2才是正确的,4、3这两种情况我不知道你是怎么理解的?
不过 $s = 你好 的时候,$s 里存的是 utf8 编码的字符串(根据你的源文件编码来),如果把这个编码的数据用 gbk 或者 gb2312 来解码,就可能得到乱码,所以4、3应该是乱码的长度。
