web-dev-qa-db-ja.com

スラッシュがJSONでエスケープ可能な文字であるのはなぜですか?

重複の可能性:
JSON:スラッシュがエスケープされるのはなぜですか?

json.org は、スラッシュ(別名solidus、/)エスケープすることができます:

"\/"

ただし、エスケープされていないスラッシュも有効です。

"/"

これの背後にある理由は何ですか?それはJavascriptのルーツから来ていますか? (つまり、"</script>"はブラウザベースのJavascriptの問題です。 Douglas Crockfordのコメント を参照してください。それとも他の理由がありますか?

23
Boldewyn

私の最初の考えは正しかったようです。

JavaScriptでは'\/' === '/'、JSON ほぼ有効なJavaScriptです。しかし、他の無視されたエスケープ(\zなど)がJSONで許可されていないのはなぜですか?

このための鍵は、 http://www.cs.tut.fi/~jkorpela/www/revsol.html 、続いて http://www.w3.org/ TR/html4/appendix/notes.html#hB.3.2 。スラッシュエスケープの機能により、JSONをHTML(SGMLとして)およびXMLに埋め込むことができます。

3
Boldewyn

ブログに この問題のレビュー を公開しました。私はあなたが正しいと思います、それが唯一の理由です。また、エスケープできる標準文字はスラッシュだけであることに注意してください。

通常、JSONエンコーダーはそれを間違って実行し、途中で見つかったスラッシュをエスケープしますが、</script>のスラッシュのみをエスケープする必要があり、同じ理由で、JavaScript RegExp /<\/\w+/と一致するすべてのスラッシュをエスケープする必要があります。 。

編集:ブログのリンクを修正しました。

6
aercolino