ich von mehreren Möglichkeiten denken kann, zu erklären, warum manchmal ein String nicht entgangen ist:
- vielleicht der ursprüngliche Programmierer war zuversichtlich, dass die Zeichenfolge an bestimmten Stellen keine Sonderzeichen hatten (allerdings wäre dies meiner Meinung nach Programmieren ist schlecht, es kostet sehr wenig, um einen String als Schutz gegen zukünftige Änderungen zu entgehen)
- Die Zeichenfolge wurde bereits an dieser Stelle im Code entfernt. Du willst auf keinen Fall zweimal einer Saite entkommen; Der Benutzer wird dann die Escape-Sequenz anstelle des beabsichtigten Textes sehen.
- Die Zeichenfolge war das eigentliche HTML selbst. Sie wollen dem HTML nicht entkommen; Sie möchten, dass der Browser es verarbeitet!
EDIT - Der Grund für die Flucht ist, dass Sonderzeichen wie &
und <
kann am Ende der Browser verursacht etwas anderes als zeigen, was Sie bestimmt. Ein blankes &
ist technisch ein Fehler im HTML. Die meisten Browser versuchen, solche Fehler intelligent zu behandeln und werden sie in den meisten Fällen korrekt anzeigen. (Dies wird mit ziemlicher Sicherheit in Ihrem Beispieltext passieren, wenn die Zeichenfolge z. B. Text in einer <div>
war.) Da es sich jedoch um ein schlechtes Markup handelt, funktionieren einige Browser nicht gut. Hilfstechnologien (z. B. Text-zu-Sprache) können fehlschlagen; und es kann andere Probleme geben.
Es gibt mehrere Fälle, die trotz der besten Bemühungen des Browsers, sich von schlechtem Markup zu erholen, scheitern werden. Wenn Ihre Beispielzeichenfolge ein Attributwert wäre, wäre das Umgehen der Anführungszeichen unbedingt erforderlich. Es gibt keine Möglichkeit, dass ein Browser etwas richtig handhaben wird, wie:
<img alt=""bread" & "butter"" ... >
Die allgemeine Regel ist, dass jedes Zeichen, das nicht Markup, sondern könnte als Markup verwechselt werden muß maskiert werden.
Beachten Sie, dass es mehrere Kontexte gibt, in denen Text in einem HTML-Dokument angezeigt werden kann, und sie separate Anforderungen für das Escaping aufweisen. Innerhalb von Attributwerten müssen Sie die Anführungszeichen und das kaufmännische Und-Zeichen (aber nicht <
) umgehen. Sie müssen Zeichen, die keine Repräsentation im Zeichensatz des Dokuments haben, fliehen (unwahrscheinlich, wenn Sie UTF-8 verwenden, aber das ist nicht immer der Fall).Innerhalb der Textknoten müssen nur &
und <
maskiert werden. Innerhalb von href-Werten müssen Zeichen, die in einer URL maskiert werden müssen, maskiert werden (und manchmal doppelt maskiert werden, sodass sie immer noch maskiert werden, nachdem der Browser sie einmal ausgeblendet hat). Innerhalb eines CDATA-Blocks sollte im Allgemeinen nichts (auf der HTML-Ebene) maskiert werden.
Schließlich, abgesehen von der Gefahr der Doppel-Flucht, die Kosten für die Flucht alle Texte ist minimal: ein kleines bisschen zusätzliche Verarbeitung und ein paar zusätzliche Bytes im Netzwerk.
Ted Noch einmal meine Frage ist, wie HTML entkommt, bevor Sie es an den Browser senden? Wenn wir es nicht tun, was kostet das? –
@MSach - Ich erweiterte meine Antwort. –
Danke Ted für die ausführliche Erklärung. Eine weitere Frage ist, wenn wir das Zeichen & lt an den Browser senden, konvertiert Browser das Zeichen (in diesem Fall & lt zu <) automatisch, bevor es gerendert wird? –