扫码关注官方订阅号
php > $s="你好";php > echo mb_strlen($s,"utf8");2utf8返回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应该是乱码的长度。
$s = "你好"
$s
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为$s是UTF8编码,你没有转成GBK就通过GBK的编码获取它的长度。
UTF8编码的
你好在GBK上是浣犲ソ,所以它的长度是3呀。应该这么干:
也就是,GB2312也是错的。
mb_strlen 是返回字符数,所以只有返回2才是正确的,4、3这两种情况我不知道你是怎么理解的?
不过
$s = "你好"的时候,$s里存的是 UTF8 编码的字符串(根据你的源文件编码来),如果把这个编码的数据用 GBK 或者 GB2312 来解码,就可能得到乱码,所以4、3应该是乱码的长度。