echo mb_strlen($s,"utf8");2utf8返回2,我理解php > echo mb_strlen($s,"gb2312");4这里返回4,我也理解php > echo mb_strlen($s,"gbk");3这里我就不理解了?"/> echo mb_strlen($s,"utf8");2utf8返回2,我理解php > echo mb_strlen($s,"gb2312");4这里返回4,我也理解php > echo mb_strlen($s,"gbk");3这里我就不理解了?">
Maison >développement back-end >tutoriel php >为何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
这里我就不理解了?
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呀。
应该这么干:
<code>$a = mb_strlen(iconv( 'utf-8','gbk', $s), 'gbk'); $b = mb_strlen(iconv( 'utf-8','gb2312', $s), 'gb2312'); </code>
也就是,GB2312也是错的。
mb_strlen 是返回字符数,所以只有返回2才是正确的,4、3这两种情况我不知道你是怎么理解的?
不过 $s = "你好"
的时候,$s
里存的是 UTF8 编码的字符串(根据你的源文件编码来),如果把这个编码的数据用 GBK 或者 GB2312 来解码,就可能得到乱码,所以4、3应该是乱码的长度。