>백엔드 개발 >PHP 문제 >PHP json 중국어 문자 왜곡 문제 해결

PHP json 중국어 문자 왜곡 문제 해결

藏色散人
藏色散人원래의
2020-11-05 10:18:332153검색

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

PHP json 중국어 문자 왜곡 문제 해결

推荐:《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(&#39;a&#39;=>&#39;a&#39;,&#39;b&#39;=>&#39;b&#39;); //string &#39;{"a":"a","b":"b"}&#39; (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(&#39;zhagnsan&#39;,&#39;9999999&#39;,&#39;beautiful grils&#39;);
//只会将类中public属性转为json格式
var_dump(json_encode($zhangsan)); //string &#39;{"name":"zhangsan"}&#39; (length=19)
//对于数组或是对象包含中文,json_encode会将中文转换为unicode编码,
//解决方法:先将类或是数组中的中文字段进行url编码(urlencode),然后再对对象或是数组进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json
$arr=array(&#39;ename&#39;=>&#39;dqs&#39;,&#39;cname&#39;=>&#39;你猜啊&#39;);
var_dump(json_encode($arr)); //中文,出现乱码,string &#39;{"ename":"dqs","cname":"\\u4f60\\u731c\\u554a"}&#39; (length=44)
$arr[&#39;cname&#39;]=urlencode($arr[&#39;cname&#39;]);
$arr_json=urldecode(json_encode($arr));
var_dump($arr_json); //string &#39;{"ename":"dqs","cname":"你猜啊"}&#39; (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[&#39;cname&#39;]);
//$newData=iconv("GB2312","UTF-8//IGNORE",$data);

위 내용은 PHP json 중국어 문자 왜곡 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.