• 技术文章 >后端开发 >PHP问题

    解决php json中文乱码问题

    藏色散人藏色散人2020-11-05 10:18:33原创416

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

    推荐:《PHP视频教程

    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,里面的中文依旧是那个中文,完成我们想要的效果

    <meta charset="utf-8">
    <?php
    //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);

    以上就是解决php json中文乱码问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php json
    上一篇:php如何关闭pdo 下一篇:php怎么将时间戳转换时间格式?
    大前端线上培训班

    相关文章推荐

    • php 页面乱码的解决方法• php数据库中文乱码的解决办法• php下载文件出现乱码怎么办• php导出excel出现乱码怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网