欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

为何gbk编码的返回结果是3?

程序员文章站 2022-04-19 10:08:21
...
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呀。

应该这么干:

$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应该是乱码的长度。

相关标签: php