php json中文亂碼的解決辦法:首先將類中的中文欄位進行url編碼;然後再將物件進行json編碼;最後進行url解碼即可解決亂碼問題。
推薦:《》
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中文亂碼問題的詳細內容,更多請關注TW511.COM其它相關文章!