PHP json編碼遇到的問題

2022-02-15 14:39:38 字數 1539 閱讀 9546

今天遇到了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...