在 PHP 開發中,透過 AJAX 傳遞 JSON 資料時,經常會遇到字串被自動加上反斜線(\)進行轉義的情況。這會導致 json_decode() 解析失敗,回傳 NULL。本文將詳細介紹如何正確處理這類問題,包含移除反斜線、處理 BOM 標頭、以及常見錯誤的排查方案。
最直接的方法是使用 PHP 內建的 stripslashes() 函數移除反斜線,再進行 JSON 解碼:
$str = stripslashes($_POST['json']); $arr = json_decode($str, true);
若資料格式不標準(例如雙引號前有反斜線 \"),可先將 \" 替換為 ",再解碼:
$json = str_replace('\\"', '"', $json);
$arr = json_decode($json, true);
若上述方法仍回傳 NULL,可能是因為字串包含 UTF-8 BOM 標頭(EF BB BF)。需先移除 BOM 再解碼:
$arr = json_decode(trim($json, chr(239).chr(187).chr(191)), true);
stripslashes() 移除轉義反斜線\" 為 "json_decode($str, true) 轉為關聯陣列json_last_error() 確認解碼狀態json_last_error_msg() 獲取具體錯誤訊息mb_convert_encoding() 轉換json_decode() 的 $depth 參數掌握這些技巧,能讓你在處理 AJAX 傳遞的 JSON 資料時更加得心應手,避免因轉義字符導致的解析失敗。