json decode解碼失敗

2021-06-29 02:31:18 字數 717 閱讀 4951

案例:

今日批量匯入遊戲, 從別人介面拉去的字串json_decode總是失敗, 但是把log裡面記錄的解碼失敗的字串copy出來單獨解析,卻可以成功. 排除了是字元編碼的問題後, 還是不行, 百思不得其解.

只好二進位制對比, 把接收到buf和我列印到log對比, 發現還真存在一些差異

分析:乙個乙個位元組對比, 發現從第373個位元組開始不匹配. 乙個是9=>\t, 乙個是32對應空格.

373 not equal, org:9    , new:32 , 原來, 如果字串中含有\t字元, 就會解碼失敗.

而我log裡面記錄的字串, 我在copy字串到其他地方解析時, \t自動被轉換為了空格. 怪不得.

總結:json 編譯碼 json_decode json_encode失敗

1) 對於php json_decode失敗, 原因可能是

a) 輸入的字串不是utf-8的, 可以用 mb_detect_encoding 檢測出字串的編碼型別.  

解決:如果不是utf-8, 可以使用iconv轉換. utf8_encode函式慎用! 其總是認為輸入字串為iso-8859-1編碼的!!.

b) 輸入字串中含有 \t回車等隱藏的不可見字元.

eg對於如下字串會解碼失敗:

$str = "";  去掉\t則可以解碼成功

解決: $str = strtr($str, "\t", ' '); 把\t都替換成空格.

php使用json decode返回NULL

php5.2以後自帶json decode函式,但是對json文字串的格式要求非常嚴格。很可能使用該函式得到的返回值是null 可以使用使用json last error 函式獲取到的返回值來幫助我們判斷出問題的原因。其中如果提示錯誤json error syntax syntax error 表示...

json decode遇到的編碼問題

初入csdn,就最近遇到的簡單問題做乙個功能解釋 json encode和json decode只針對utf8字元有效,如果遇到其他編碼比如gbk,需要進行轉碼然後解析 header content type text html charset gbk arr array a hello world...

php使用json decode返回NULL

php5.2以後自帶json decode函式,但是對json文字串的格式要求非常嚴格。很可能使用該函式得到的返回值是null 可以使用使用json last error 函式獲取到的返回值來幫助我們判斷出問題的原因。其中如果提示錯誤json error syntax syntax error 表示...