我从Instagram中提取JSON:

$instagrams = json_decode($response)->数据;

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

file_put_contents(缓存美元,json_encode (results美元);

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

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

我收集从我的搜索,json_encode()自动做这个…有办法让它失效吗?


当前回答

有办法让它失效吗?

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

重要的阅读之前: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/"

其他回答

我不得不遇到这样的情况,简单地说,就是

str_replace("\/","/",$variable)

对我有用。

有办法让它失效吗?

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

重要的阅读之前: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/"

是的,但是不要这样做——逃避前斜杠是一件好事。当在<script>标记中使用JSON时,需要在任何地方使用</script> -即使在字符串中-将结束脚本标记。

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

另一方面,我在PHPUNIT断言url包含在或等于json_encoded -的url时遇到了一个问题

我的期望:

http://localhost/api/v1/admin/logs/testLog.log

将被编码为:

http:///\/localhost\/api\/v1\/admin\/logs\/testLog.log

如果你需要做一个比较,转换url使用:

addcslashes($url, '/')

在我的比较中允许适当的输出。