json_decode轉換json數據爲null

經常使用json_decode()轉換json字符串,一直都很順利,然而今天碰到了一個頭疼的問題,json字符串轉換過之後一直爲null
上網搜索了下,可以使用json_last_error()函數來查看json轉換最後發生的錯誤,json_last_error_msg()用來顯示最後發生的錯誤詳情。可以分別參考json_last_errorjson_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` ,可以將這些字符換爲空,如:

json=strreplace("\x06","", json);

因爲php也支持這種十六進制方式,所以可以用eval來達到轉義效果。

我的問題是因爲使用了AES進行加密、解密,所以可能這個過程中出現了問題,最後把不支持的字符去掉就OK了。這個還是在overstockflow上找到的。

Author:leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/70210770

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章