1. 程式人生 > >php 伺服器端解決json_decode()的bug 輸出為null, json_last_error函式為4語法錯誤

php 伺服器端解決json_decode()的bug 輸出為null, json_last_error函式為4語法錯誤

 php 伺服器端解決json_decode() bug 問題:
問題描述: json_decode() 轉換json字串時輸出結果為 null,函式返回值為false
出現問題的分析:
     1. 有可能是我們在使用外掛的時候,外掛對資料處理是添加了一些額外的符號,而這種符號對於json_decode來講
是屬於非法字元或者符號
    2. 有可能是我們在提交資料的時候額外提交了空格、換行符
     3. 有可能是資料中有多餘的 , 逗號
     4. 有可能是單雙引號編譯錯誤
     5. 有可能是無知名的錯誤字元無法進行轉義
     6. json不支援gbk編碼,也就是說資料的編碼錯誤
解決問題的方法: 1. 建議重新封裝json_encode() json_decode() 重新封裝的主要目的在於解決編碼與字元安全問題 function _json_encode($data,$option=null){ return htmlentities(urlencode(json_encode($data,$option))); } function _json_decode($json_str,$assoc=true){ return json_decode(urldecode(html_entity_decode($json_str)),$assoc);
} 2. json_decode之前先進行錯誤排除,使其返回的資料符號json_decode編譯規則 格式化錯誤的json資料,使其能被json_decode()解析 不支援健名有中文、引號、花括號、冒號 不支援健指有冒號* function format_ErrorJson($data,$quotes_key=false) { $con = str_replace('\'', '"', $data);//替換單引號為雙引號 $con = str_replace(array('\\"'), array('<|YH|>'), $con);//替換 $con = preg_replace('/(\w+):[ {]?((?<YinHao>"?).*?\k<YinHao>[,}]?)/is', '"$1": $2', $con);//
若鍵名沒有雙引號則新增 if ($quotes_key) { $con = preg_replace('/("\w+"): ?([^"\s]+)([,}])[\s]?/is', '$1: "$2"$3', $con);//給鍵值新增雙引號 } $con = str_replace(array('<|YH|>'), array('\\"'), $con);//還原替換 return $con; }