json_encode() 转义正斜杠

2022-08-30 06:23:56

我正在从Instagram中提取JSON:

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

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

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

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

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

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


答案 1

有没有办法禁用它?

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

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

答案 2

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

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


推荐