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.

War es hilfreich?

Lösung

Weil es Teil des JSON-Standard

http://json.org/

  

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top