json_encode()转义正斜杠

时间:2012-04-18 13:24:24

标签: php json

我从Instagram上拉JSON:

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:241)

  

有没有办法禁用它?

是的,您只需要使用JSON_UNESCAPED_SLASHES标志。

  

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

json_encode($str, JSON_UNESCAPED_SLASHES);

如果您手头没有PHP 5.4,请选择众多现有功能中的一个并根据您的需要进行修改,例如: http://snippets.dzone.com/posts/show/7487 (archived copy)

Example Demo

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

答案 1 :(得分:39)

Yes,但不要 - escaping forward slashes is a good thing。在<script>标记内使用JSON时,必须在</script>任意位置 - 即使在字符串内 - 也会结束脚本标记。

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

答案 2 :(得分:3)

另一方面,我遇到了PHPUNIT断言的问题,urls包含在或等于json_encoded的网址 -

我的期望:

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

将被编码为:

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

如果您需要进行比较,请使用以下方法转换网址:

addcslashes($url, '/')

在我的比较中允许正确的输出。

答案 3 :(得分:1)

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

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

为我工作了。