PHP中json中文亂碼問題解決

2021-07-08 16:22:42 字數 1659 閱讀 3483

問題:眾所周知使用json_encode可以方便快捷地將物件進行json編碼,但是如果物件的屬性中存在著中文,問題也就隨之而來了。json_encode會將中文轉換為unicode編碼,例如:'我'經過json_encode處理後變為'\u6211',最終的json中中文部分被替換為unicode編碼。我們要解決的就是將物件轉換為json並保證物件內部的中文在json中仍然是以正常的中文出現,現在看來只使用json_encode是不能達到目的的。

解決方法:先將類中的中文字段進行url編碼(urlencode),然後再對物件進行json編碼(jsonencode),最後url解碼(urldecode)json,即最終的json,裡面的中文依舊是那個中文,完成我們想要的效果

<?php

//1.將陣列、物件轉為json格式(陣列、物件都不包含中午)

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

var_dump(json_encode($arr));

class person

public function getname()

protected function getlover()

private function getmoney()

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

//只會將類中public屬性轉為json格式

var_dump(json_encode($zhangsan)); //string '' (length=19)

//對於陣列或是物件包含中文,json_encode會將中文轉換為unicode編碼,

//解決方法:先將類或是陣列中的中文字段進行url編碼(urlencode),然後再對物件或是陣列進行json編碼(jsonencode),最後url解碼(urldecode)json,即最終的json

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

var_dump(json_encode($arr)); //中文,出現亂碼,string '' (length=44)

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

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

var_dump($arr_json); //string '' (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中文亂碼問題

用php讀取檔案時經常遇到中文亂碼的問題,中文亂碼一般是因為編碼設定問題,主要分兩種情況 用php上傳檔案時,先將檔案上傳到臨時資料夾 在配置檔案中設定,如果沒有設定採用預設路徑 再將臨時檔案移動到目標資料夾下,如果上傳檔案的檔名為中文,儲存檔案時可能變為亂碼,解決辦法 在移動臨時檔案之前新增編碼轉...

PHP中文亂碼問題

a.首先說下html中文亂碼問題的解決方法。比如有個index.html的頁面 這裡是指真正的靜態頁面,修改伺服器的 偽靜態的請看方案b 1.在head標籤裡面加入這句 view plaincopy to clipboardprint?2.將檔案的編碼存為utf 8.記事本或editplus等編輯器...

php中文亂碼問題

在實際程式設計中經常遇到一些中文編碼的問題,即便已經用來指定了編碼方式,有時也會產生中文亂碼,後來經過實際操作絕得一下三種方式比較可靠 1 如果是單純的輸出可以用iconv函式 國際化字元支援。例如用,echo iconv utf 8 utf 8 曹志攀 其實iconv是php的字元轉換函式,第乙個...