PHP解析json_decode返回null,處理BOM \ufefff

問題現象

用json_decode()對JSON字符串進行編碼轉換成PHP變量時發(fā)現返回值為null,而且無明顯的參數錯誤。

問題原因

百思不得其解,最后調試發(fā)現被轉換的json字符串開頭莫名其妙的帶上了"\ufeff",查詢后得知這是由于PHP項目文件中存在帶BOM格式文件,導致使用json_encode()編碼的json字符串開頭會帶有"\ufeff",也就是傳入了帶BOM格式的UTF-8數據,在PHP5.2以后,json_encode()只能接受UTF-8無BOM編碼格式的數據。json_decode()解析非UTF-8無BOM格式的數據就會返回null。

解決方法

  1. 方法一(堵漏法)
    既然在json_encode()中傳入了帶BOM格式的UTF-8數據,導致了問題,那么我們可以在傳入參數前,對參數進行一下過濾,也就是移除參數中的BOM,PHP代碼如下:
    $result = trim($result, "\xEF\xBB\xBF");
  2. 方法二(治本法)
    導致問題的根本原因是項目中存在帶BOM格式的UTF-8文件,那么要從根本上解決問題就必須將帶BOM格式文件轉換成無BOM格式文件,在linux下可以通過下面兩條命令查找?guī)OM格式文件和將文件轉換成無BOM格式:
# 在項目根目錄,查找項目中帶BOM格式文件并顯示
     grep -r -I -l $'^\xEF\xBB\xBF' ./
# 在存在BOM格式文件的目錄,將目錄下所有文件去除BOM頭
# (注意:不能對圖片進行此操作,否則會導致圖片打不開)
     find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容