Quelqu'un peut-il expliquer ce code PHP en utilisant json_encode et json_decode?
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.
La solution
Parce que cela fait partie de la norme JSON
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.