我正在尝试获取数据库的json,代码如下
$path["file_name"] = "www.119.com\/assets\/demo\/large\/".$row["file_name"];
当我转换为 json 对象时,它显示如下。
www.119.com\\\/assets\\\/demo\\\/large\\\/demo1.png
我刚刚申请\
打印特殊字符/
,但它不起作用。我应用了很多东西来打印特殊字符。将特殊字符转换为 JSON 是否有问题?
正如其他人所提到的,正斜杠不是字符串中的特殊字符,在 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"]);
应该不需要转义斜线,因为它不被视为特殊字符。
您可能需要将 / 替换为 // 因为某些系统在解析/显示时会去除单个斜杠,因此会想到 windows。