Ich habe bemerkt, dass GSON HTML-Zeichen <
und >
löscht und dies kann mit der disableHtmlEscaping()
builder Konfigurationsmethode deaktiviert werden. Aber meine Frage ist - warum GSON standardmäßig HTML-Escaping? Was sind die Risiken von nicht HTML-Entweichen?
Danke.
Tatsächlich teilt die disableHtmlEscaping()
-Methode Gson mit, dass HTML-Zeichen wie <
, >
, &
, =
und '
nicht entfernt werden sollen.
Ein Beispiel, in dem ein einzelnes Anführungszeichen Probleme verursacht: das Rendern von nicht-deklariertem JSON in einem <script/>
-Tag in einer HTML-Seite ohne Verwendung eines zusätzlichen <![CDATA[ ... ]]>
-Tags.
Joel Leitch hat eine großartige Antwort auf eine ähnliche Frage geschrieben. Hier sind die Highlights:
Zeichen wie & lt ;, & gt ;, usw. sind maskiert, denn wenn die von Gson ausgewertete JSON-Zeichenfolge in eine XHTML-Seite eingebettet ist, wissen wir nicht, welche Zeichen diese JSON-Zeichenfolge tatsächlich umbrechen. Wenn also ein offenes Zitat vorlag, dann folgt dem eingebetteten JSON ein Schlusskurs, und wir wissen nicht, was passieren wird. Vielleicht, wenn die Gson-Zeichenfolge eine abc = 123 enthält und da eine "var abc" definiert ist, dann kann die eingebettete Gson-Ausgabe in der Seite bewirken, dass der abc-JavaScript-Variablen der Wert 123 zugewiesen wird. Dasselbe kann mit & lt passieren ; und & gt; oder sogar & amp;.
Wie für den Whitespace-Escaping ist \ t ein maskiertes Zeichen für eine Registerkarte. Entsprechend sind \ n und \ Escapezeichen für Zeilenumbrüche und Zeilenumbrüche. Das Zurückweichen von Whitespaces wie diesem sollte sicherstellen, dass jeder Editor den richtigen Whitespace anzeigt (wenn der Editor diese maskierten Zeichen richtig bewertet).
Die Escaper und JsonWriter Klassen enthalten mehr Informationen über den vollständigen Satz von Zeichen, die von Gson geflohen sind.