为了账号安全,请及时绑定邮箱和手机立即绑定

php的strlen和mb_strlen结果不同

php的strlen和mb_strlen结果不同

拉丁的传说 2019-03-30 09:31:37
//gbk编码下$s='中文测试';echomb_strlen($s,'utf-8');echostrlen(iconv('gbk','utf-8',$s));1.为什么值不相等2.strlen计算的是字符串的字节数还是字符数?3.mb_strlen计算的是什么?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

$s里面有四个宽字符由于你是gbk环境下的所以占8个字节如果你把它转成utf-8编码的将会占12个字节strlen()返回占多少个字节mb_strlen()返回实际为多少个字符如果是宽字符的话他会当成长度为一来计算
所以下面的代码
//gbk
$s='中文测试';
$s_u8=iconv('gbk','utf-8',$s);
var_dump(strlen($s),strlen($s_u8),
mb_strlen($s,'gbk'),mb_strlen($s_u8,'utf-8'));
结果依次是8,12,4,4
貌似你第二句把编码写错了但是写错了也能得到一样的结果。。不知道为什么
                            
查看完整回答
反对 回复 2019-03-30
?
慕斯709654

TA贡献1840条经验 获得超5个赞

1.楼主的mb_strlen()用法是不是有点小问题。mb_strlen是根据字符串的编码方式来计算字符数。
楼主是否是想用下面的代码:
//gbk编码下
$s='中文测试';
echomb_strlen($s,'gbk');
echomb_strlen(iconv('gbk','utf-8',$s),'utf-8');
长度都是4,所以首先确保传给mb_strlen的编码方式正确。
2.strlen()只计算字节数
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 418 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信