So maskieren oder dekodieren Sie HTML
- Wählen Sie Kodieren oder Dekodieren.
- Legen Sie beim Kodieren unter Umwandeln fest, was maskiert werden soll:
- Nur & < > " ‘ für HTML, das Sie in eine Seite oder ein Template einfügen.
- Plus alles außer ASCII für Seiten, E-Mails oder Systeme, die nicht UTF-8-sicher sind.
- Jedes Zeichen, um den gesamten Text zu kodieren, etwa zum Testen von Parsern.
- Wählen Sie das Format: Benannt (é), Dezimal (é) oder Hex (é). Bei Zeichen ohne gängigen Namen greift „Benannt“ auf die Dezimalform zurück. Wählen Sie Anführungszeichen umwandeln ab, wenn der Text nur in Elementinhalt kommt.
- Ausgabe kopieren. Tauschen verschiebt das Ergebnis auf die andere Seite, für eine Gegenprobe.
Das Dekodieren verwendet den HTML-Parser des Browsers. Damit wird jede der über 2.000 benannten Referenzen von HTML5 unterstützt, dazu dezimale und hexadezimale Referenzen. Die Eingabe wird nie als HTML gerendert.
Häufige Entities
| Zeichen | Benannt | Dezimal | Hex |
|---|---|---|---|
& | & | & | & |
< | < | < | < |
> | > | > | > |
" | " | " | " |
' | ' (HTML5) | ' | ' |
| geschütztes Leerzeichen | |   |   |
é | é | é | é |
— | — | — | — |
€ | € | € | € |
© | © | © | © |
😀 | keine | 😀 | 😀 |
Numerische Referenzen verwenden den Unicode-Codepoint. Das Emoji belegt in UTF-8 vier Bytes, aber nur eine Referenz.
Fallstricke beim Maskieren und Dekodieren
- Maskieren Sie
&zuerst. Wer erst<durch<ersetzt und dann&durch&, erhält&lt;. Jeder selbst geschriebene Encoder muss&vor allen anderen behandeln. - Ein unmaskiertes
&im Text kann zum Symbol werden. HTML erkennt manche alten Entities auch ohne Semikolon, der Text?id=1©=2¶=3wird daher als?id=1©=2¶=3angezeigt. Schreiben Sie für jedes kaufmännische Und&, auch in URLs. - Doppeltes Maskieren zeigt sich als
&lt;b&gt;auf der Seite. Dekodieren Sie einmal und suchen Sie dann die Schicht, die doppelt maskiert. ist kein Leerzeichen. Es wird zu U+00A0 dekodiert, das wie ein Leerzeichen aussieht, aber in manchen Sprachen bei String-Vergleichen undtrim()durchfällt.- Entities sind keine URL-Kodierung. In einem Link trennt
&im HTML-Quelltext Query-Parameter, während%26ein literales kaufmännisches Und innerhalb eines Werts ist. Um Letzteres kümmert sich der URL-Encoder.
Maskieren und Dekodieren im Code
import html
html.escape('5 > 3 & "quotes"') # '5 > 3 & "quotes"'
html.unescape("Café — ©") # 'Café — ©'
const escapeHtml = s => s.replace(/&/g, "&").replace(/</g, "<")
.replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
const unescapeHtml = s =>
new DOMParser().parseFromString(s, "text/html").documentElement.textContent;
html.escape in Python maskiert standardmäßig auch Anführungszeichen und schreibt ' als '. In PHP ist htmlspecialchars() die übliche Wahl; seit PHP 8.1 maskiert es standardmäßig beide Arten von Anführungszeichen. DOMParser führt im geparsten Dokument keine Skripte aus und ist damit ein sicherer Weg, im Browser zu dekodieren. Mehr zur Arbeit mit Zeichenketten in JavaScript auf der JavaScript-Seite.
Entities, Base64 und Data-URIs
HTML-Entities und Base64 lösen unterschiedliche Probleme. Entities machen Zeichen im HTML-Quelltext sicher; Base64 wandelt Bytes in Text um, damit eine ganze Datei in ein Attribut passt. Um ein vollständiges HTML-Dokument in eine data:-URI oder ein JSON-Feld einzubetten, kodieren Sie es mit HTML in Base64, statt jedes Zeichen zu maskieren.
Häufige Fragen
Welche Zeichen müssen in HTML maskiert werden?
Im Textinhalt & und <, nach Konvention auch >. In Attributwerten zusätzlich das Anführungszeichen, das den Wert begrenzt, also " oder '. Alles andere, auch Umlaute, Akzentbuchstaben und Emoji, kann in einer UTF-8-Seite unverändert bleiben.
Was ist der Unterschied zwischen ' und '?
Beide stehen für den Apostroph. ' ist in HTML5 und XML definiert, fehlte aber in HTML 4. Daher ist ' die Form, die in jedem Parser und E-Mail-Client funktioniert. Der Encoder hier verwendet '.
Warum sehe ich &amp; auf meiner Seite?
Der Text wurde doppelt maskiert: Aus & wurde &, und ein zweiter Durchgang machte daraus &amp;. Dekodieren Sie hier einmal, um den gewünschten Text zu erhalten, und entfernen Sie den überzähligen Maskierungsschritt. Meist maskiert eine Template-Engine einen Wert, der schon maskiert war.
Verhindert das Maskieren mit HTML-Entities XSS?
Es verhindert Injektionen in HTML-Text und Attributwerte in Anführungszeichen. In <script>-Blöcken, javascript:-URLs, CSS oder Attributen ohne Anführungszeichen macht es Daten nicht sicher; diese Kontexte brauchen ihre eigene Kodierung. Verlassen Sie sich vorzugsweise auf das automatische Escaping Ihrer Template-Engine.