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?

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

WBOY
WBOYoriginal
2016-08-22 11:45:371309parcourir

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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn