Json_encode 添加反斜杠:揭开谜底
在 JavaScript 领域,json_encode 长期以来一直是将数据编码为 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中文网其他相关文章!