首頁 >後端開發 >php教程 >為什麼 `json_encode` 添加反斜線以及如何防止它?

為什麼 `json_encode` 添加反斜線以及如何防止它?

Patricia Arquette
Patricia Arquette原創
2024-11-12 04:36:01361瀏覽

Why does `json_encode` add backslashes and how can I prevent it?

Json_encode 增加反斜線:揭開謎底

在JavaScript 領域,json_encode 長期以來一直是將資料編碼值得為JSON 格式的編碼值得為JSON 格式的信賴的盟友。然而,一些開發者遇到了一個意想不到的現象,json_encode 在輸出中引入了反斜線。

上傳難題

使用 json_encode 傳回 JSON 資料時會出現這樣的狀況檔案上傳。考慮以下程式碼:

print_r($result); // Associative array

$encoded_result = json_encode($result); // Valid JSON

echo $encoded_result;

無法解釋的反斜線

令開發人員驚訝的是,產生的JSON 包含不需要的反斜線:

{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}

精確定位罪魁禍首

初步調查顯示,反斜線是在 json_encode 和瀏覽器解析 JSON 資料之間的某處添加的。

alert(data.toSource()); // Result: invalid JSON with added "status:200"

隱藏變數

仔細檢查發現了一個意想不到的罪魁禍首: Plupload 綁定事件。

uploader.bind('FileUploaded', function(up, file, data) {
  alert(data.toSource());
  $('#' + file.id + " b").html("100%");
});

Plupload,一個流行的檔案上傳庫,似乎正在操縱返回的數據,添加“status:200”屬性並對斜杠進行編碼。

解決方案:逃避斜線

阻止不需要的東西反斜線,程式碼被修改為在json_encode 函數呼叫中包含「JSON_UNESCAPED_SLASHES」選項:

$encoded_result = json_encode($result, JSON_UNESCAPED_SLASHES);

此選項有效地停用正斜線的轉義,從而產生所需的JSON輸出:

{"logo_url":"http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}

揭曉真相

總而言之,json_encode 輸出中加入反斜線歸因於 Plupload 綁定事件對資料的意外操作。透過合併「JSON_UNESCAPED_SLASHES」選項,開發人員可以防止這種不必要的轉義字元幹擾他們的 JSON 資料。

以上是為什麼 `json_encode` 添加反斜線以及如何防止它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn