1

我正在尝试获取数据库的json,代码如下

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

当我转换为 json 对象时,它显示如下。

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

我刚刚申请\打印特殊字符/,但它不起作用。我应用了很多东西来打印特殊字符。将特殊字符转换为 JSON 是否有问题?

4

2 回答 2

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 源代码中 - 因为它将被解释为不同的值。

从 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"]);
于 2013-03-27T08:51:36.383 回答
0

应该不需要转义斜线,因为它不被视为特殊字符。

您可能需要将 / 替换为 // 因为某些系统在解析/显示时会去除单个斜杠,因此会想到 windows。

于 2013-03-27T08:36:18.447 回答