經常使用json_decode()
轉換json
字符串,一直都很順利,然而今天碰到了一個頭疼的問題,json
字符串轉換過之後一直爲null
。
上網搜索了下,可以使用json_last_error()
函數來查看json
轉換最後發生的錯誤,json_last_error_msg()
用來顯示最後發生的錯誤詳情。可以分別參考json_last_error和json_last_error_msg 。
一般錯誤都是爲4
,意思是編碼錯誤
。因爲json_decode()
只能夠轉換UTF-8
編碼的json
字符串。
然而,我的錯誤顯示是3
, 控制字符錯誤,可能是編碼不對
。
嘗試過以下方法:
一: json 字符串中反斜槓被轉義,使用 htmlspecialchars_decode() 函數處理;
二:在保存 json 數據時使用 urlencode() 函數;(因爲json數據不是在我這邊控制的,而且將得到的json保存爲文本再轉換是沒問題的,故沒驗證該方法)
三:將編碼轉換爲UTF-8,
$content = mb_detect_encoding($json, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); //查看編碼
$json= mb_convert_encoding($content tent , "UTF-8", "GBK"); //將字符串轉爲UTF-8
四:在文件頭加
五:查找文件中是否存在`bom`,如果存在也會出現該問題;
六:檢查json字符串中是否多逗號;
七:檢查json中的名稱和值是否用的是雙引號,在json裏只能用雙引號表示字符串,不要用單引號;
八:檢查json中的值是否有數字類型的,並且首位爲零;(這個貌似沒問題)
九:字符的表示方式方式有很多種,但下面的都不支持 ,如:`\x06` ,可以將這些字符換爲空,如:
因爲php也支持這種十六進制方式,所以可以用eval來達到轉義效果。
我的問題是因爲使用了AES
進行加密、解密,所以可能這個過程中出現了問題,最後把不支持的字符去掉就OK了。這個還是在overstockflow
上找到的。
Author:leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/70210770