json_encode()转义正斜杠

Mic*_* C. 158 php json

我从Instagram上拉JSON:

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

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

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

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

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

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

hak*_*kre 267

有没有办法禁用它?

是的,你只需要使用JSON_UNESCAPED_SLASHES旗帜.

!重要的阅读之前:https://stackoverflow.com/a/10210367/367456(知道你在处理什么 - 了解你的敌人)

json_encode($str, JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)

如果您手头没有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";
Run Code Online (Sandbox Code Playgroud)

示例输出:

"http:\/\/www.example.com\/"
"http://www.example.com/"
Run Code Online (Sandbox Code Playgroud)

  • **丑陋的 PHP!** `JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES` 必须是默认的,而不是(奇怪的)选项...如何对 php 开发人员说? (5认同)
  • 这个答案很糟糕,但 JSON Encode 作为标准,你应该将它保留为转义,然后在接收端撤消转义的 php 的 `strip_slashes` 和 JS http://phpjs.org/functions/stripslashes/ (3认同)

Thi*_*ter 44

是的,但不要 - 逃避正斜杠是一件好事.当在<script>标签内部使用JSON时,必须在</script>任何地方 - 甚至在字符串内 - 将结束脚本标签.

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

  • @MichaelC.在JSON中,字符串值""\ /"`与字符串值""/"`完全相同 - 并且正在运行的JSON解析器将对其进行处理.同样的规则适用于javascript字符串,因此将JSON作为javascript代码提供也不会有任何麻烦.我很惊讶PHP甚至还有`JSON_UNESCAPED_SLASHES`标志. (19认同)
  • 那么javascript在拉入json时会自动删除反斜杠,还是我需要指定的东西? (5认同)
  • 它会自动处理它.与许多其他语言一样,在语言中没有特殊含义的转义字符只会使这些字符单独存在. (5认同)
  • 但是如果将数据编码为JSON然后将它们存储到数据库列中呢?如果程序有一些机制来逃避字符数据库的缘故,那么这个功能是否会非常不方便,因为现在斜杠被双重转义? (4认同)
  • 在没有编码步骤的情况下将JSON转储到脚本标记中,假设JSON实现正在转义斜杠,这似乎是一种肯定会最终咬你的做法. (4认同)
  • @Esailija因为JSON已变得无处不在,所以不一定总是与JavaScript一起使用。我正在创建一个HTTP API,返回的JSON可以在NodeJS应用程序的JS中解析,或者可以由Web服务器在PHP中读取,或者可以在iOS应用程序的Swift中解析。最好不要偏向于JS特定的解决方案/行为。 (2认同)