PHP json_decode 函數解析 json 結果爲 NULL 的解決方法

在作網站 CMS 模塊時,對於模塊內容 content 字段,保存的是 json 格式的字符串,因此在後臺進行模塊內容的編輯操做 ( 取出保存的數據 ) 時,須要用到 json_decode() 函數。html

可是在解析的時候,使用 json_decode() 函數解析的結果一直是 NULL,沒有出現但願解析成的數組。下面是問題和分析:json

1. 當輸出 json 字符串時,代碼和頁面的顯示內容分別是:數組

echo $content = $res[0]['con']['content'];

只須要考慮 $content , $res[0]['con']['content'] 是從返回的數據中取出 content 的值,這裏不須要考慮。這時頁面顯示:函數

{"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg","bname":"112","breason":"22","about1":"3334","about2":"444","about3":"555","tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg","tpic2":"group1\/M00\/00\/0D\/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg","tpic3":"group1\/M00\/00\/0D\/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg"}

稍微美化一下:網站

{
"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg", "bname":"112", "breason":"22", "about1":"3334", "about2":"444", "about3":"555", "tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg", "tpic2":"group1\/M00\/00\/0D\/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg", "tpic3":"group1\/M00\/00\/0D\/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg" }

2. 此時使用 json_decode() 解析 $content,並使用 var_dump 打印:url

$content = json_decode($content,true);

可是頁面卻顯示 NULL。此時使用 json_last_error() 函數打印一下錯誤,頁面顯示4,也就是語法錯誤。spa

echo $errorinfo = json_last_error();   //輸出4 語法錯誤

 

解決方法一:code

出現這個問題是由於在 json 字符串中反斜槓被轉義,只須要用 htmlspecialchars_decode() 函數處理一下 $content 便可:htm

$content = htmlspecialchars_decode($content);

此時再使用 json_decode() 函數解析,就沒有問題了,頁面輸出:blog

Array ( 
[bpic] => group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg 
[bname] => 112 [breason] => 22 [about1] => 3334 [about2] => 444 [about3] => 555 [tpic1] => group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg
[tpic2] => group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg [tpic3] => group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg
)

 

解決方法二:


在保存 json 數據時使用 urlencode() 函數:

$content = urlencode(json_encode($content));

解析時使用 urldecode() 函數:

$content = urldecode($content);

便可避免反斜槓轉義形成的沒法解析。

相關文章
相關標籤/搜索