php json显示乱码,学习猿地-解决php json中文乱码问题

php json中文乱码的解决办法:首先将类中的中文字段进行url编码;然后再将对象进行json编码;最后进行url解码即可解决乱码问题。

a60912f3bafe35b75ad2901280443327.jpg

PHP中json中文乱码问题解决

问题:

众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了。

json_encode会将中文转换为unicode编码,例如:'我'经过json_encode处理后变为'\\u6211',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。

解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文,完成我们想要的效果

//1.将数组、对象转为json格式(数组、对象都不包含中午)

$arr=array('a'=>'a','b'=>'b'); //string '{"a":"a","b":"b"}' (length=17)

var_dump(json_encode($arr));

class Person{

private $money=0;

public $name=null;

protected $lover=null;

public function __construct($name,$money,$lover){

$this->name=$name;

$this->money=$money;

$this->lover=$lover;

}

public function getName(){

return $this->name;

}

protected function getLover(){

return $this->love;

}

private function getMoney(){

$this->money;

}

}

$zhangsan=new Person('zhagnsan','9999999','beautiful grils');

//只会将类中public属性转为json格式

var_dump(json_encode($zhangsan)); //string '{"name":"zhangsan"}' (length=19)

//对于数组或是对象包含中文,json_encode会将中文转换为unicode编码,

//解决方法:先将类或是数组中的中文字段进行url编码(urlencode),然后再对对象或是数组进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json

$arr=array('ename'=>'dqs','cname'=>'你猜啊');

var_dump(json_encode($arr)); //中文,出现乱码,string '{"ename":"dqs","cname":"\\u4f60\\u731c\\u554a"}' (length=44)

$arr['cname']=urlencode($arr['cname']);

$arr_json=urldecode(json_encode($arr));

var_dump($arr_json); //string '{"ename":"dqs","cname":"你猜啊"}' (length=35)

//3.补充知识,查看字符编码方式以及转码

$name="dsq,你好啊";

//iconv_get_encoding()获取当前页面的编码信息

var_dump(mb_detect_encoding($name)); //UTF-8

$name=iconv("UTF-8","GB2312//IGNORE",$name);

var_dump(mb_detect_encoding($name)); //UTF-8

//思考,为什么将utf-8编码转为gb2312后还是utf-8呢?

查看字符串编码mb_detect_encoding

//echo mb_detect_encoding($arr['cname']);

//$newData=iconv("GB2312","UTF-8//IGNORE",$data);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值