Quelqu'un peut-il expliquer ce code PHP en utilisant json_encode et json_decode?

StackOverflow https://stackoverflow.com/questions/127739

  •  02-07-2019
  •  | 
  •  

Question

  $a = '{ "tag": "<b></b>" }';
  echo json_encode( json_decode($a) );

Cette sortie:

{"tag":"<b><\/b>"}

quand vous pensez qu'il produirait exactement l'entrée. Pour une raison quelconque, json_encode ajoute une barre oblique supplémentaire.

Était-ce utile?

La solution

Parce que cela fait partie de la norme JSON

http://json.org/

  

caractère

any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/ <---- see here?
\b
\f
\n
\r
\t
\u four-hex-digits

Autres conseils

utiliser ceci:

echo json_encode($a,JSON_HEX_TAG)

Le résultat sera:

["\u003C\u003E"]

Vous pouvez lire cet article pour améliorer vos connaissances sur JSON_ENCODE http://php.net/manual/fr/function.json-encode. php

C'est probablement une fonctionnalité de sécurité. La version échappée (par exemple, la sortie) serait analysée comme si elle était semblable à la version sans échappement, par Javascript (par exemple, \ / devient / ). Après avoir échappé à la barre oblique, il y a moins de risque que le navigateur interprète mal la chaîne Javascript en HTML. Bien sûr, si vous traitez les données correctement, cela ne devrait pas être nécessaire, c'est donc davantage une protection contre les programmeurs sans intelligence qui gâchent les choses pour eux-mêmes.

Votre entrée n'est pas un JSON valide, mais l'analyseur JSON de PHP (comme la plupart des analyseurs JSON) l'analyse quand même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top