PHP:json_encode将斜杠更改为\/

3

我有一个变量包含一个路径,使用json_encode后,路径变成了这样:

/users/crazy_bash/online/test/
 \/users\/crazy_bash\/online\/test\/

为什么?如何显示普通路径?
代码:
$pl2 = json_encode(array(
    'comment' => $nmp3,
    'file' => $pmp3
));
echo($pl2);

1
json_encode()就是干这个的,不是吗?如果你解码这个json字符串,它又会变成正确的,对吧? - TRiG
尝试使用json_decode了吗? - Elen
5个回答

9
这是合法的JSON格式,可以查看http://json.org/。反斜杠\/在解码字符串时会被转换为正斜杠/。如果输出由正确的JSON解析器反序列化,为什么还要担心这个呢?
如果你坚持要在输出中使用\/,可以使用str_replace()函数进行替换:
// $data contains: {"url":"http:\/\/example.com\/"}
$data = str_replace("\\/", "/", $data);
echo $data; // {"url":"http://example.com/"}

请注意,根据字符串的定义,它仍然是有效的JSON格式:

JSON string
(图片来源:json.org)


这张图片不是在说明为了使JSON有效,前斜杠和反斜杠都需要转义吗? - gen_Eric
当然可以...问题是什么? - Vultour
1
@Rocket 不是这样的,它说允许任何UNICODE字符,除了双引号或反斜杠或控制字符(包括正斜杠和反斜杠)。此外,\/也被识别,并且会变成/。有多种方法可以指定正斜杠,包括\u002F - Lekensteyn
@Lekensteyn:啊,好的,图表有点令人困惑 :-P - gen_Eric

6

转义的斜杠是合法的。但如果您想得到一个没有转义的结果,在json_encode选项中使用JSON_UNESCAPED_SLASHES。不过,这是在PHP 5.4之后添加的。 因此,str_replace('\\/', '/', $pl2);会很有帮助。


没有必要这样做,一旦解析或解码,字符串就是正确的。 - gen_Eric
是的,我知道。但是一个没有转义的斜杠也是合法的。而且“更干净(非常主观)”或者“人性化”的结果对某些人来说很有帮助。我同意这篇文章的观点;http://noteslog.com/post/the-solidus-issue/ - lqez

1

在使用前,你需要对其进行解码。

json_decode()


0

json_encode 的作用就是这样的。一旦你使用 json_decode 或者 JSON.parse 解析它,就没问题了。

var f = {"a":"\/users\/crazy_bash\/online\/test\/"}
console.log(f.a); // "/users/crazy_bash/online/test/"

var h = JSON.parse('{"a":"\/users\/crazy_bash\/online\/test\/"}');
console.log(h.a); // "/users/crazy_bash/online/test/"

0

我曾经遇到过同样的问题,基本上你需要对数据进行解码,然后再进行编码,这样就可以正确地工作而不会出现斜杠了,检查一下代码。

$getData = json_decode($getTable);                  
$json = json_encode($getData);

header('Content-Type: application/json');
print $json;    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接