2013-03-27 67 views
1

斜杠我试图得到数据库的JSON和代码是这样处理逃过JSON字符串

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

当我转换成JSON对象,并将它这样表示。

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

我刚刚申请\打印特殊字符/,但它不工作。我应用了很多东西来打印特殊字符。将特殊字符转换为JSON时会出现问题吗?

+1

你甚至不需要放一个单独的\那里。 – hjpotter92 2013-03-27 08:33:28

+1

'/'不是特殊字符。 – Jon 2013-03-27 08:33:42

+0

你不需要转义正斜杠'/'。你只需要跳过反斜杠'\\'。 – Havelock 2013-03-27 08:36:59

回答

0

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

您可能需要将/替换为//当某些系统在解析/显示时剥去一个斜线时,会想到Windows。

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()因为数据似乎是一个URL:

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

所以。我应该怎么做才能打印www.119.com/asset/demo/large – user2064667 2013-03-27 09:02:12

+0

谢谢。我知道了。 – user2064667 2013-03-27 09:03:24

+0

@ user2064667从PHP 5.4.0开始,您可以在PHP中为'json_encode()'提供'JSON_UNESCAPED_SLASHES'标志,以防止它添加反斜杠。但是这是不必要的,可能会导致严格的JSON解析器拒绝数据。 – DaveRandom 2013-03-27 09:05:48