我正在尝试获取数据库的json,代码就像这样
$path["file_name"] = "www.119.com\/assets\/demo\/large\/".$row["file_name"];
当我转换为json对象时,它显示为这样。
www.119.com\\\/assets\\\/demo\\\/large\\\/demo1.png
我刚刚应用\
来打印特殊字符/
,但它不起作用。我应用了许多东西来打印特殊字符。将特殊字符转换为JSON是一个问题吗?
答案 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。