处理逃脱斜线的JSON字符串(Handling escaped slashes in a JSON

2019-10-17 22:07发布

我试图让数据库的JSON和代码是这样的

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

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

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

我刚刚申请\打印特殊字符/ ,但它不工作。 我申请很多事情要打印特殊字符。 它是在特殊字符转换成JSON的一个问题?

Answer 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源 - 因为它会被作为interpretted不同的值。

自PHP 5.4.0可以提供JSON_UNESCAPED_SLASHES标志json_encode()在PHP中,以防止它添加反斜杠。 然而,这是不必要的,并且可能导致严格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"]);


Answer 2:

应该没有必要逃避斜线作为其不被视为一个特殊字符。

您可能需要更换/与//为某些系统剥离单斜线时,它被解析/显示,窗口浮现在脑海。



文章来源: Handling escaped slashes in a JSON string
标签: php json slash