195

我正在从 Instagram 中提取 JSON:

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

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

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

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

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

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

4

4 回答 4

343

有没有办法禁用它?

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

示例演示

<?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/"
于 2012-04-18T13:29:37.377 回答
51

的,但不要转义正斜杠是一件好事。在<script>标签内使用 JSON 时,</script>任何地方(即使在字符串内)都必须结束脚本标签。

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

于 2012-04-18T13:25:44.303 回答
4

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

我的预期:

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

将被编码为:

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

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

addcslashes($url, '/')

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

于 2015-03-13T19:30:19.143 回答
-1

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

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

确实为我工作。

于 2019-10-15T03:25:34.287 回答