Kann jemand diesen PHP-Code mit json_encode und json_decode erklären?
Frage
$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
Diese Ausgänge:
{"tag":"<b><\/b>"}
Wenn Sie würden denken, es würde die Ausgabe genau die Eingabe. Aus irgendeinem Grund json_encode fügt einen zusätzlichen Schrägstrich.
Lösung
Weil es Teil des JSON-Standard
char
any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ <---- see here? \b \f \n \r \t \u four-hex-digits
Andere Tipps
verwenden:
echo json_encode($a,JSON_HEX_TAG)
Ergebnis wird sein:
["\u003C\u003E"]
Sie können diesen Artikel lesen Sie Ihr Wissen über json_encode zu verbessern http://php.net/manual/en/function.json-encode. php
Das ist wahrscheinlich ein Sicherheitsmerkmal. Die maskierte Version (z. B. die Ausgabe) würde die unescaped-Version als ähnlich analysiert werden, von Javascript (Eg. \/
wird /
). Nachdem der Schrägstrich so entkommen, gibt es eine geringere Chance des Browsers die Javascript-String als HTML falsch interpretiert. Natürlich, wenn Sie die Daten korrekt, diese Behandlung soll nicht nötig sein, so ist es mehr ein Schutz gegen einen ahnungslosen Programmierer Dinge für mich selbst in Unordnung.
Ihre Eingabe ist JSON nicht gültig, aber PHP JSON-Parser (wie die meisten JSON-Parser) wird es trotzdem analysieren.