json_encode() 转义正斜杠

新手上路,请多包涵

我正在从 Instagram 中提取 JSON:

$instagrams = json_decode($response)->data;

然后将变量解析成 PHP 数组来重构数据,然后重新编码和缓存文件:

file_put_contents($cache,json_encode($results));

当我打开缓存文件时,所有正斜杠“/”都被转义:

http:\/\/distilleryimage4.instagram.com\/410e7...

我从搜索中收集到 json_encode() 自动执行此操作…有没有办法禁用它?

原文由 Michael C. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

有没有办法禁用它?

是的,您只需要使用 JSON_UNESCAPED_SLASHES 标志(PHP 5.4+)。

!important 之前阅读: https ://stackoverflow.com/a/10210367/367456(知道你在处理什么 - 了解你的敌人: 不要在 web/html 上下文中使用- CLI,除非 CGI,可能很好,如果他们认为出于可读性目的需要在 JSON HTTP 上下文中使用它,那么他们会遇到不同的问题)

 json_encode($str, JSON_UNESCAPED_SLASHES);

如果您手头没有 PHP 5.4(您肯定已经声明了上面的警告),请选择众多现有函数之一并根据您的需要对其进行修改,例如 http://snippets.dzone.com/posts/show/7487 (存档副本)

示例演示

<?php
/*
 * Escaping the reverse-solidus character ("/", slash) is optional in JSON.
 *
 * This can be controlled with the JSON_UNESCAPED_SLASHES flag constant in PHP.
 *
 * @link http://stackoverflow.com/a/10210433/367456
 */

$url = 'http://www.example.com/';

echo json_encode($url), "\n";

echo json_encode($url, JSON_UNESCAPED_SLASHES), "\n";

示例输出:

 "http:\/\/www.example.com\/"
"http://www.example.com/"

原文由 hakre 发布,翻译遵循 CC BY-SA 4.0 许可协议

的,但不要 转义正斜杠是一件好事。当在 <script> 标签中使用 JSON 时,有必要使用 </script> 任何地方——甚至在字符串中——将结束脚本标签。

根据使用 JSON 的位置,它不是必需的,但可以安全地忽略它。

原文由 ThiefMaster 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏