HTML Entity-Kodierungswerkzeug
HTML-Entity-Zeichen online konvertieren, Kodierung und Dekodierung unterstützt, XSS-Angriffe effektiv verhindern
Konvertierungsmethode wählen
Was ist HTML Entity-Kodierung?
HTML Entity-Kodierung ist ein Mechanismus, der Sonderzeichen in HTML-Entity-Referenzen umwandelt. In HTML haben bestimmte Zeichen eine besondere Bedeutung (wie <, >, &). Um diese Zeichen auf der Seite anzuzeigen, muss Entity-Kodierung verwendet werden. Es gibt zwei Formen: benannte Entities (wie <) und numerische Entities (wie <). Benannte Entities sind lesbarer, numerische Entities können beliebige Unicode-Zeichen darstellen. HTML-Encoding ist wichtig, wenn Text in HTML eingefügt wird, ohne als Markup interpretiert zu werden. Zeichen wie <, >, &, Anführungszeichen und Apostroph können sonst Tags, Attribute oder Entities verändern. Das Werkzeug hilft bei Beispielen, Templates, CMS-Inhalten und Debugging von XSS-Problemen. Kontext bleibt entscheidend: HTML-Text, Attribute, URLs, JavaScript und CSS benötigen unterschiedliche Escaping-Regeln.
Anleitung
So wird's verwendet
- Gib Text im linken Eingabefeld ein oder füge ihn ein
- Klicke auf die entsprechende Schaltfläche, um die Kodierungs- oder Dekodierungsmethode zu wählen
- Das Ergebnis wird automatisch rechts angezeigt
- Klicke auf die Schaltfläche ‚Kopieren‘, um das Ergebnis in die Zwischenablage zu kopieren
Konvertierungsmethoden
Tastaturkürzel
- Ctrl + EHTML-Entity-Kodierung
- Ctrl + DHTML-Entity-Dekodierung
Tipps zur Kodierung
- Kodiere sichtbaren Text vor dem Einfügen in den HTML-Quellcode, insbesondere wenn er spitze Klammern, Anführungszeichen oder das &-Zeichen enthalten könnte.
- HTML-Entity-Kodierung verhindert, dass Markup als solches interpretiert wird, ist aber nur ein Teil der XSS-Verteidigung und ersetzt nicht das kontextbezogene Output-Escaping.
Anwendungsfälle
Technisches Prinzip
HTML verwendet zwei Arten von Zeichenreferenzen, die im WHATWG HTML Living Standard definiert sind. Benannte Zeichenreferenzen beginnen mit & und enden mit ;, basierend auf der entities.json-Tabelle von WHATWG (ca. 2.231 Namen in der aktuellen Spezifikation, darunter Legacy-Aliase ohne abschließendes Semikolon wie & ohne ;). Numerische Zeichenreferenzen verwenden Unicode-Codepunkte in dezimaler (<) oder hexadezimaler (<) Form und können jedes Zeichen von U+0000 bis U+10FFFF kodieren, außer dem Surrogate-Bereich U+D800–U+DFFF. Die fünf Zeichen, die zur Wahrung der HTML-Syntaxis-Sicherheit maskiert werden MÜSSEN, sind & (&), < (<), > (>), " (") und ' ('); ' ist zwar Teil von XML und HTML5, aber NICHT gültig in HTML 4.01, weshalb OWASP die numerische Form ' für Attribute in doppelten Anführungszeichen empfiehlt, die über Legacy-Parser hin- und hergereicht werden müssen. Die Kodierung in diesem Werkzeug ist ein einstufiger Ersetzungsvorgang: Die Reihenfolge ist entscheidend, da & zuerst maskiert werden muss, sonst würden die für < und > eingefügten Entity-Präfixe selbst zu &lt; doppelt kodiert. Die Dekodierung nutzt den HTML-Parser des Browsers, indem die Eingabe dem innerHTML eines losgelösten Elements zugewiesen und textContent zurückgelesen wird; dies ruft die offizielle Tokenizer-Zustandsmaschine der HTML-Spezifikation auf (Abschnitte 13.2.5.72 Zeichenreferenzzustand bis 13.2.5.80), die benannte, dezimale und hexadezimale Formen korrekt auflöst, einschließlich fehlerhafter Eingaben wie fehlender Semikola. Die numerische Kodierung für den Vollkodierungsmodus durchläuft die Zeichenkette Codepunkt für Codepunkt mit String.prototype.codePointAt, um astrale Zeichen zu behandeln, die ein UTF-16-Surrogate-Paar belegen (z. B. wird Emoji U+1F600 zu 😀 statt der Zwei-Surrogate-Fallback-Darstellung). Die XSS-Prävention erfordert kontextbewusstes Escaping, nicht nur HTML-Entity-Kodierung. Das OWASP Cross-Site Scripting Prevention Cheat Sheet definiert fünf unterschiedliche Kontexte: HTML-Body, HTML-Attribut (mit/ohne Anführungszeichen), JavaScript-Daten (innerhalb von <script>), CSS und URL. HTML-Entity-Escaping deckt nur die Kontexte 1 und 2 ab. JavaScript-Kontexte sollten \xHH- oder \uHHHH-Escapes über JSON.stringify verwenden, URL-Kontexte benötigen encodeURIComponent (RFC 3986-Prozentkodierung), und Inline-Event-Handler verkomplizieren die Regeln, da ihre Werte sowohl durch den HTML- als auch den JavaScript-Parser geleitet werden. Ein Content-Security-Policy-Header mit script-src 'self' und entferntem 'unsafe-inline' ist die moderne Defense-in-Depth-Schicht, die Escaping-Fehler abfängt, und DOM-Sinks wie innerHTML, document.write und setAttribute('on*', ...) sollten durch textContent oder Framework-verwaltete Bindings (React's JSX, Vue's Mustache-Syntax) ersetzt werden, die standardmäßig escapen.
- Benannte Referenzen: ca. 2.231 Einträge in WHATWG entities.json; die fünf Pflicht-Escape-Namen sind & < > " ' (' ist nur HTML5/XML, nicht HTML 4.01)
- Numerische Referenzen: dezimal &#DDDDD; und hexadezimal &#xHHHH; decken U+0000 bis U+10FFFF ab; Surrogate U+D800–U+DFFF und U+0000 NULL sind laut HTML-Spezifikation ungültig
- Maskierungsreihenfolge: & muss zuerst ersetzt werden, sonst wird das eingefügte &-Präfix nachfolgender Maskierungen doppelt kodiert; die Kodierung ist O(n) mit einer 5-Einträge-Lookup-Tabelle
- Dekodierung über DOMParser: Zuweisung an das innerHTML eines losgelösten Elements löst den HTML-Spezifikations-Tokenizer aus (Zeichenreferenzzustand, Abschnitte 13.2.5.72–80), der Legacy-Entities ohne abschließende Semikola korrekt verarbeitet
- Astrale Zeichenverarbeitung: Verwendung von String.prototype.codePointAt und for...of-Iteration, sodass Emoji- und CJK-Erweiterung-B-Zeichen (U+10000+) ein einzelnes &#NNNNN; erzeugen statt zweier Surrogate-Referenzen
- Kontextbewusstes Escaping (OWASP XSS Prevention Cheat Sheet Regel #0): HTML-Body, HTML-Attribut, JavaScript, CSS und URL benötigen jeweils unterschiedliches Escaping; HTML-Entities allein stoppen XSS nicht in JS- oder URL-Sinks
- Defense in Depth: Content-Security-Policy script-src 'self' (RFC-Stil), DOMPurify-Allowlist-Sanitization für Rich-Text-Eingaben, und Bevorzugung von textContent/innerText gegenüber innerHTML in Vanilla-DOM-Code
Beispiele
Grundlegende Element-Kodierung
Eingabe: <script>alert(1)</script>
Ausgabe: <script>alert(1)</script>
Use: verhindert, dass der Browser den Text beim Rendern benutzergenerierter Inhalte als echtes Tag interpretiertKodierung von Attributwerten
Eingabe: <div title="Hello & world">
Ausgabe: <div title="Hello & world">
Note: Anführungszeichen und das kaufmännische Und im Attribut werden als Entitäten kodiert, damit der Wert nicht aus den Anführungszeichen ausbrechen kannAnzeige von URLs auf der Seite
Eingabe: search?q=hello&lang=en
Ausgabe: search?q=hello&lang=en
Use: die Seite sollte das & kodieren, bevor die URL in HTML eingefügt wird, sonst könnte der Parser den Rest als fehlerhafte Entität interpretierenNicht-ASCII-Zeichen (vollständige Kodierung)
Eingabe: CJK-Zeichen wie 中文
Ausgabe: vollständige numerische UTF-8-Form 中文 (oder benannte Entitäten, falls die Seite sie unterstützt)
Use: sichere Einbettung beliebiger Unicode-Zeichen in Legacy-HTML; moderne Seiten setzen stattdessen meist auf UTF-8FAQ
Welche Zeichen wandelt das HTML-Encoding um?
Die fünf SGML-reservierten Zeichen: & → &, < → <, > → >, " → ", ' → ' (oder '). Optional können Nicht-ASCII-Zeichen in numerische Entities (&#xNN;) umgewandelt werden, für Altsysteme, die kein UTF-8 verarbeiten.
Wann brauche ich HTML-Encoding?
Immer dann, wenn vom Nutzer gelieferter Text in HTML-Inhalte eingefügt wird. Fehlendes Encoding ist die Hauptursache für XSS-Schwachstellen. Kodiere Nutzerinhalte für HTML-Body, Attributwerte, JavaScript-Kontext, CSS-Kontext und URL-Kontext — jeder Kontext hat leicht andere Regeln.
Was ist der Unterschied zwischen ' und '?
Beide erzeugen ein einfaches Anführungszeichen. ' wurde in HTML5 ergänzt, ist aber in HTML4 oder älteren E-Mail-Clients ungültig — wenn deine Ausgabe von alten Systemen gelesen wird, nutze '. Die Seite gibt standardmäßig ' aus für maximale Kompatibilität.
Warum enthält meine Ausgabe immer noch &?
Wenn die Eingabe bereits eine HTML-Entity wie & enthält, ergibt das Encoding &amp; — was korrekt ist, weil das Eingabe-Et-Zeichen ein literales Zeichen war, keine Entity. Dekodiere zuerst, falls deine Quelle bereits Entity-kodiert ist.
Werden Emojis umgewandelt?
Emojis sind gültiges Unicode und modernes HTML behandelt sie als gewöhnliche Zeichen — kein Encoding nötig, sofern dein Zielsystem nicht auf reines ASCII besteht. Schalte „numerische Entity für Nicht-ASCII“ ein, um sie in die &#xNNNN;-Form zu überführen.
Ist das Encoding dasselbe wie URL-Encoding?
Nein. URL-Encoding (Percent-Encoding) ersetzt unsichere Zeichen durch %NN-Sequenzen für die Verwendung in URLs. HTML-Encoding ersetzt sie durch benannte oder numerische Entities für die Verwendung in HTML. Nutze das richtige Tool für den richtigen Kontext — sie zu vermischen erzeugt Doppel-Encoding-Bugs.
Findet die Umwandlung lokal statt?
Ja. Encoding und Decoding passieren in deinem Browser. Eingefügter Text wird nicht hochgeladen.