php json_decode返回null

OldBoy~發表於2018-02-06

在使用json_decode函式想把json串轉化為陣列的時候,出現了null,當時還以為是因為json對字串的長度有限制,還以為是因為兩邊少了引號,經過多次處理,發現都沒有效果。 百度各種帖子,發現此問題還有人遇到過,那麼這個問題肯定也就有解決的方法啦~看過幾個帖子,總結問題的出現原因大概有這麼幾點。我這裡把收集到的都總結了

json_decode要求的字串比較嚴格
1. 使用UTF-8編碼 
2. 不能在最後元素有逗號 
3. 不能使用單引號 
4. 不能有\r,\t,如果有請替換

解決方案

一、bom頭問題

json字串中的BOM頭是不可見字元,某些編輯器預設會加上BOM頭。

<?php
$info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);

二、語法錯誤

使用 json_last_error() 函式列印一下錯誤,頁面顯示4,也就是語法錯誤。

<?php
echo $errorinfo = json_last_error(); //輸出4 語法錯誤

出現這個問題是因為在 json 字串中反斜槓被轉義,只需要用 htmlspecialchars_decode() 函式處理一下 $content 即可:

$info= htmlspecialchars_decode($info);

三、其他破壞json字串的字元

<?php
 $info=  preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));

我是使用第三種方案解決的問題~

相關文章