在開發 API 時,從 MySQL 讀取含有 HTML 標籤與特殊字元的文章內容(content 欄位),若直接 json_encode 會導致 JSON 結構破壞。PHP 5.2 以上內建支援轉義,但若維護舊專案(PHP < 5.2),需自行實作轉義函式。
原始字串:
'Lorem ipsum "dolor" sit amet, consectetur \ adipiscing elit.'
轉義後應為:
Lorem ipsum \"dolor\" sit amet,\nconsectetur \\ adipiscing elit.
# 參考 www.json.org 規範 (\b backspace, \f formfeed)
public function escapeJsonString($value) {
$escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c");
$replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b");
$result = str_replace($escapers, $replacements, $value);
return $result;
}
$escapers 定義需轉義的字元:反斜線、正斜線、雙引號、換行、回車、定位鍵、退位鍵、換頁鍵。$replacements 為對應的跳脫序列。json_encode 時。提示:若專案已升級至 PHP 5.2+,請直接使用內建 json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE) 更完善。