今天遇到了json編碼解碼之後中文消失的問題,一**竟,寫下這篇文章
php中提供了json_encode 和json_decode 這對函式 將php中 值轉化成 字串,但是遇到中文的時候,很容易出現亂碼。為什麼呢?
檢視php手冊,發現json只支援utf-8編碼,也就是說,中文在進行json_encode時,必須是utf-8編碼,json_decode之後也是utf-8編碼
測試程式如下:
<?php$arr = array
('name'=>'德瑪西亞',
'age'=>20
);$str = json_encode($arr);
$str = json_decode($str,true);
var_dump($str);
?>
輸出結果如下
array'name' => null
'age' => int 20
可以看到,中文在這個轉化過程中丟失了。
解決這個問題目前我知道兩種方法。
方法1:轉碼,json_encode之前確保編碼是utf-8,而且別忘記 json_decode之後 轉回原來的編碼
如下所示:
<?php$arr = array
('name'=>iconv('gbk', 'utf-8','德瑪西亞'),
'age'=>20
);$str = json_encode($arr);
$str = json_decode($str,true);
$str['name'] = iconv('utf-8','gbk',$str['name']);//別忘了轉回來
var_dump($str);
?>
執行如下:
array'name' => string '德瑪西亞' (length=8)
'age' => int 20
方法二:
urlencode 和urldecode 來幫忙。其實原理也一樣,urlencode會將 串的編碼轉成utf-8的。
<?php$arr = array
('name'=>urlencode('德瑪西亞'),
'age'=>20
);$str = json_encode($arr);
$str = json_decode($str,true);
$str['name'] = urldecode($str['name']);
var_dump($str);
?>
執行結果
array'name' => string '德瑪西亞' (length=8)
'age' => int 20
出了上面兩種方法,檢視手冊可知,在php5.4以後,json_encode可以帶乙個引數json_unescaped_unicode來避免這個問題
PHP json問題總結
我們都知道json是輕量級的資料結構,但是在實際用的時候,有很多的麻煩,那就是json物件跟json字串分不清 varobj 這是乙個物件,注意鍵名也是可以使用引號包裹的 varjson 這是乙個 json 字串,本質是乙個字串 json 和 js 物件互轉 要實現從物件轉換為 json 字串,使用...
json decode遇到的編碼問題
初入csdn,就最近遇到的簡單問題做乙個功能解釋 json encode和json decode只針對utf8字元有效,如果遇到其他編碼比如gbk,需要進行轉碼然後解析 header content type text html charset gbk arr array a hello world...
json decode遇到的編碼問題
初入csdn,就最近遇到的簡單問題做乙個功能解釋 json encode和json decode只針對utf8字元有效,如果遇到其他編碼比如gbk,需要進行轉碼然後解析 header content type text html charset gbk arr array a hello world...