处理JSON字符串中的转义斜杠

时间:2013-03-27 08:31:54

标签: php json slash

我正在尝试获取数据库的json,代码就像这样

   $path["file_name"] = "www.119.com\/assets\/demo\/large\/".$row["file_name"];

当我转换为json对象时,它显示为这样。

www.119.com\\\/assets\\\/demo\\\/large\\\/demo1.png

我刚刚应用\来打印特殊字符/,但它不起作用。我应用了许多东西来打印特殊字符。将特殊字符转换为JSON是一个问题吗?

2 个答案:

答案 0 :(得分:1)

正如其他人所提到的,正斜杠不是字符串中的特殊字符,在PHP或Javascript中(因为JSON是从Javascript派生的,所以它遵循相同的字符串插值规则)。但是,如果你正在阅读一些JSON,你可能会认为它是原谅的(虽然你应该总是 RTM ;-))。

您认为需要转义斜杠的原因是由于PHP和Javascript插入多余正斜杠的方式存在细微差别。请考虑以下字符串声明,在PHP和Javascript中均有效:

"AC\/DC"

在PHP中,额外的反斜杠被视为文字,因此:

echo "AC\/DC"; // outputs AC\/DC

在Javascript中,额外的反斜杠被删除,所以:

console.log("AC\/DC"); // logs AC/DC

JSON要求转发正斜杠,但json_encode()将为您解决此问题。您不需要自己为字符串添加反斜杠。由于插入这些额外反斜杠的方式不同,您不能简单地将JSON字符串放入PHP源代码中 - 因为它将被解释为不同的值。

Since PHP 5.4.0您可以在PHP中为JSON_UNESCAPED_SLASHES提供json_encode()标志,以防止它添加反斜杠。但是这是不必要的,可能会导致严格的JSON解析器拒绝数据。

总而言之,在PHP中声明字符串的正确方法是:

$path["file_name"] = "www.119.com/assets/demo/large/".$row["file_name"];

作为旁注,您可能还要在字符串的开头包含http://,并将$row['file_name']传递给urlencode(),因为数据似乎是一个网址:

$path["file_name"] = "http://www.119.com/assets/demo/large/".urlencode($row["file_name"]);

答案 1 :(得分:0)

应该没有必要逃避斜线,因为它不被视为特殊字符。

你可能需要用/替换//,因为有些系统在解析/显示时会删除一个斜杠,想到了windows。