今天在調用接口獲取json數據轉碼的時候遇到了問題,記錄一下
1.問題描述
成功獲取到了數據,但經過json_decode
解碼後卻爲 null
2.分析
使用 json_last_error()
函數得到錯誤代碼 3
,在網上查到原因爲返回的數據爲 UTF-8
有 BOM
頭編碼,而 PHP
使用的是 無 BOM
頭的UTF-8
編碼,所以解析錯誤,知道錯誤了就好辦了,下面就來解決。
3.解決
這裏我使用了正則替換的方法
// 注意,這裏要先把空格給清除掉
$tempResult = preg_replace('/[\x00-\x1F\x80-\x9F]/u', '',trim($tempResult));
4.總結
json_last_error這個函數很重要,這裏我整理了一些json_last_error返回值對應的錯誤信息,可以根據這些錯誤信息去網上搜索相應的解決方案:
- 0 = JSON_ERROR_NONE 沒有錯誤發生
- 1 = JSON_ERROR_DEPTH 到達了最大堆棧深度
- 2 = JSON_ERROR_STATE_MISMATCH 無效或異常的 JSON
- 3 = JSON_ERROR_CTRL_CHAR 控制字符錯誤,可能是編碼不對
- 4 = JSON_ERROR_SYNTAX 語法錯誤
- 5 = JSON_ERROR_UTF8 異常的 UTF-8 字符,也許是因爲不正確的編碼。