PHP:json_encode将斜杠改为\ /

时间:2012-01-12 15:58:50

标签: php

我有一个变量,其中包含json_encode中的路径  /用户/ crazy_bash /在线/测试/

但是json_encode将路径转换为:

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

为什么呢?如何显示正常路径?

代码

$pl2 = json_encode(array(
    'comment' => $nmp3,
    'file' => $pmp3
));
echo($pl2);

5 个答案:

答案 0 :(得分:8)

这是完全合法的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 http://json.org/string.gif

答案 1 :(得分:3)

Escaped solidus是合法的。但是如果你想要一个没有转义的结果,请在json_encode选项中使用JSON_UNESCAPED_SLASHES。但是,这是在PHP 5.4之后添加的。 因此,str_replace('\\/', '/', $pl2);会有所帮助。

答案 2 :(得分:1)

您必须在使用前解码它。

json_decode()

答案 3 :(得分:0)

这就是json_encode应该做的事情。在json_decodeJSON.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/"

答案 4 :(得分:0)

我遇到了同样的问题,基本上你需要解码你的数据,然后进行编码,这样它就可以正常工作而不用条形码,检查代码。

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

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