溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php json中文亂碼怎么辦

發(fā)布時(shí)間:2020-11-06 10:49:41 來源:億速云 閱讀:217 作者:小新 欄目:編程語言

小編給大家分享一下php json中文亂碼怎么辦,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

php json中文亂碼的解決辦法:首先將類中的中文字段進(jìn)行url編碼;然后再將對(duì)象進(jìn)行json編碼;最后進(jìn)行url解碼即可解決亂碼問題。

PHP中json中文亂碼問題解決

問題:

眾所周知使用json_encode可以方便快捷地將對(duì)象進(jìn)行json編碼,但是如果對(duì)象的屬性中存在著中文,問題也就隨之而來了。

json_encode會(huì)將中文轉(zhuǎn)換為unicode編碼,例如:'我'經(jīng)過json_encode處理后變?yōu)?#39;\\u6211',最終的json中中文部分被替換為unicode編碼。我們要解決的就是將對(duì)象轉(zhuǎn)換為json并保證對(duì)象內(nèi)部的中文在json中仍然是以正常的中文出現(xiàn),現(xiàn)在看來只使用json_encode是不能達(dá)到目的的。

解決方法:先將類中的中文字段進(jìn)行url編碼(urlencode),然后再對(duì)對(duì)象進(jìn)行json編碼(jsonencode),最后url解碼(urldecode)json,即最終的json,里面的中文依舊是那個(gè)中文,完成我們想要的效果

<meta charset="utf-8">
<?php
//1.將數(shù)組、對(duì)象轉(zhuǎn)為json格式(數(shù)組、對(duì)象都不包含中午)
$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');
//只會(huì)將類中public屬性轉(zhuǎn)為json格式
var_dump(json_encode($zhangsan)); //string '{"name":"zhangsan"}' (length=19)
//對(duì)于數(shù)組或是對(duì)象包含中文,json_encode會(huì)將中文轉(zhuǎn)換為unicode編碼,
//解決方法:先將類或是數(shù)組中的中文字段進(jìn)行url編碼(urlencode),然后再對(duì)對(duì)象或是數(shù)組進(jìn)行json編碼(jsonencode),最后url解碼(urldecode)json,即最終的json
$arr=array('ename'=>'dqs','cname'=>'你猜啊');
var_dump(json_encode($arr)); //中文,出現(xiàn)亂碼,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.補(bǔ)充知識(shí),查看字符編碼方式以及轉(zhuǎn)碼
$name="dsq,你好啊";
//iconv_get_encoding()獲取當(dāng)前頁面的編碼信息
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編碼轉(zhuǎn)為gb2312后還是utf-8呢?
查看字符串編碼mb_detect_encoding
//echo mb_detect_encoding($arr['cname']);
//$newData=iconv("GB2312","UTF-8//IGNORE",$data);

以上是php json中文亂碼怎么辦的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI