Json_encode()转义正斜杠

我从Instagram中提取JSON:

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

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

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

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

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

我从我的搜索中收集到json_encode()自动执行此操作…有办法让它失效吗?

192192 次浏览

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

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

有办法让它失效吗?

是的,你只需要使用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(存档副本)

< a href = " https://eval。in/300422" rel="noreferrer">示例演示 . in/300422" rel="noreferrer">

<?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/"

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

我的期望:

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

将被编码为:

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

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

addcslashes($url, '/')

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

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

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


对我有用。