json_decode解碼失敗.__js

來源:互聯網
上載者:User
案例:
今日大量匯入遊戲, 從別人介面拉去的字串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 = "{\"ret\t\": 0}";  去掉\t則可以解碼成功
     解決: $str = strtr($str, "\t", ' '); 把\t都替換成空格.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.