La raison de cela "m'échappe".
JSON échappe à la barre oblique, ainsi un hachage {a: "a/b/c"}
est sérialisé en tant que {"a":"a\/b\/c"}
au lieu de {"a":"a/b/c"}
.
Pourquoi?
JSON ne vous oblige pas à le faire, il vous permet de le faire. Il vous permet également d’utiliser "\ u0061" pour "A", mais ce n’est pas obligatoire. Autoriser \/
facilite l'intégration de JSON dans une balise <script>
, ce qui n'autorise pas </
à l'intérieur des chaînes, comme le fait remarquer Seb.
Certaines des API ASP.NET Ajax/JSON de Microsoft utilisent cette échappatoire pour ajouter des informations supplémentaires, par exemple, une date/heure sera envoyée en tant que "\/Date(milliseconds)\/"
. (Beurk)
La spécification JSON indique que vous pouvez échapper à la barre oblique, mais ce n'est pas obligatoire.
J'ai demandé la même question il y a quelque temps et j'ai dû y répondre moi-même. Voici ce que je suis venu avec:
Il semble que ma première pensée [ qu'il provienne de son racines JavaScript] était correcte.
'\/' === '/'
en JavaScript et JSON est valide JavaScript. Cependant, pourquoi les autres échappements ignorés (comme\z
) ne sont-ils pas autorisés dans JSON?La clé pour cela était la lecture http://www.cs.tut.fi/~jkorpela/www/revsol.html , suivie de http://www.w3.org/ TR/html4/appendix/notes.html # hB.3.2 . La fonctionnalité de l'échappement de barre oblique permet à JSON d'être incorporé dans HTML (en tant que SGML) et XML.
Le JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
doit être par défaut, pas une option (étrange) ... Comment le dire aux développeurs-php?
La valeur par défaut DOIT être l'utilisation la plus fréquente, ainsi que les normes (actuelles) les plus largement utilisées, telles que UTF8. Combien de fragments de code PHP dans le Github ou un autre endroit ont besoin de cette fonctionnalité "intégrée au HTML" exoctic?
PHP échappe par défaut aux barres obliques , ce qui explique probablement pourquoi cela apparaît si souvent. Je ne sais pas pourquoi, mais peut-être parce que l'incorporation de la chaîne "</script>"
dans une balise <script>
est considérée comme non sécurisée.
Cette fonctionnalité peut être désactivée en passant l'indicateur JSON_UNESCAPED_SLASHES
, mais la plupart des développeurs ne l'utiliseront pas car le résultat d'origine est déjà un code JSON valide.