ToolActToolAct

HTML Entity-Kodierungswerkzeug

HTML-Entity-Zeichen online konvertieren, Kodierung und Dekodierung unterstützt, XSS-Angriffe effektiv verhindern

Texteingabe
Zeichen: 0
Bytes: 0
Konvertierungsergebnis
Zeichen: 0
Bytes: 0

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 &lt;) und numerische Entities (wie &#60;). 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

  1. Gib Text im linken Eingabefeld ein oder füge ihn ein
  2. Klicke auf die entsprechende Schaltfläche, um die Kodierungs- oder Dekodierungsmethode zu wählen
  3. Das Ergebnis wird automatisch rechts angezeigt
  4. Klicke auf die Schaltfläche ‚Kopieren‘, um das Ergebnis in die Zwischenablage zu kopieren

Konvertierungsmethoden

HTML-Entity-KodierungWandelt < > & „ ‚ in benannte Entities um – geeignet zur XSS-Prävention
HTML-Entity-DekodierungStellt benannte Entities wieder in die ursprünglichen Zeichen um
Numerische Entity-KodierungWandelt Sonderzeichen in numerische Entity-Form um (z. B. &#60;)
Vollständige KodierungKodiert alle Nicht-ASCII-Zeichen – geeignet für die Internationalisierung
Vollständige DekodierungStellt alle Formen von HTML-Entities wieder her

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

Unsichere Zeichen vor dem Einfügen in HTML maskierenKodiere Und-Zeichen, spitze Klammern, Anführungszeichen und Apostrophe als benannte Entities, damit kopierter Benutzertext in Markup-Beispielen erscheinen kann, ohne zu Tags oder Attributen zu werden. Der ursprüngliche Quelltext wird nie übertragen – jede Ersetzung erfolgt lokal gegen den eingegebenen Wert, sodass interne Dokumentenentwürfe, nicht veröffentlichte Texte oder private Codeausschnitte bereinigt werden können, ohne den Text an einen externen Dienst zu senden.
Entities aus kopiertem Seitenquellcode decodierenWechsle in den Entity-, Numerischen- oder Vollständigen-Decode-Modus, um &amp;lt;, &#60; oder andere kodierte Ausschnitte beim Debugging oder bei der Inhaltsbereinigung wieder in lesbaren Text umzuwandeln. Die Decodierung nutzt den DOM-Parser der Seite gegen einen losgelösten Knoten – die Eingabe gelangt nie in eine Netzwerkanfrage und der rekonstruierte Text verbleibt im selben Browser-Tab, in dem er eingegeben wurde.
Zwischen minimaler und vollständiger Kodierung wählenNutze den Entity- oder Numerischen-Modus nur für die kritischen HTML-Zeichen, oder die vollständige Kodierung, wenn auch Nicht-ASCII-Zeichen numerische Zeichenreferenzen für ältere Systeme benötigen. Wähle den Modus, der zum erwarteten Entity-Set des Ziels passt – benannte Entities für gut lesbares HTML, numerische Entities für ältere CMS-Templates und vollständige Kodierung für reine ASCII-Transportkanäle.
Und-Zeichen und spitze Klammern für sicheres CMS-Einfügen kodierenFühre einen Codeausschnitt oder Template-String durch den Encode-Modus, damit &, <, > und Anführungszeichen zu den Entities &amp; &lt; &gt; werden, bevor du ihn in einen Rich-Text-Editor, eine E-Mail-Vorlage oder ein statisches Seitenfeld einfügst, das die Eingabe als HTML nachparst. Da die Kodierung ein lokaler Regex-Durchlauf ist, bleibt der Originalausschnitt auf der Seite, bis du das Ergebnis explizit kopierst – hilfreich, wenn die Quelle vertrauliche Beispiele enthält.
JSON in HTML-Attributen beim Inspektieren decodierenWechsle in den Numerischen- oder Vollständigen-Decode-Modus, um &#123; &#x7B; &quot; und ähnliche Sequenzen beim Lesen von kodiertem JSON, Webhook-Payloads oder Attributstrings aus gespeichertem Seitenquellcode wieder in echte Zeichen umzuwandeln. Das decodierte JSON verbleibt im rechten Ausgabebereich – nichts wird an einen Parser-Endpunkt gesendet, sodass Payload-Fragmente aus Produktionslogs ohne Verlassen des Browsers inspiziert werden können.

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 &amp ohne ;). Numerische Zeichenreferenzen verwenden Unicode-Codepunkte in dezimaler (&#60;) oder hexadezimaler (&#x3C;) 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 & (&amp;), < (&lt;), > (&gt;), " (&quot;) und ' (&#39;); &apos; ist zwar Teil von XML und HTML5, aber NICHT gültig in HTML 4.01, weshalb OWASP die numerische Form &#39; 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 &amp;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 &#128512; 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 &amp; &lt; &gt; &quot; &apos; (&apos; 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 &amp;-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: &lt;script&gt;alert(1)&lt;/script&gt;
Use:    verhindert, dass der Browser den Text beim Rendern benutzergenerierter Inhalte als echtes Tag interpretiert

Kodierung von Attributwerten

Eingabe:  <div title="Hello & world">
Ausgabe: &lt;div title=&quot;Hello &amp; world&quot;&gt;
Note:   Anführungszeichen und das kaufmännische Und im Attribut werden als Entitäten kodiert, damit der Wert nicht aus den Anführungszeichen ausbrechen kann

Anzeige von URLs auf der Seite

Eingabe:  search?q=hello&lang=en
Ausgabe: search?q=hello&amp;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 interpretieren

Nicht-ASCII-Zeichen (vollständige Kodierung)

Eingabe:  CJK-Zeichen wie 中文
Ausgabe: vollständige numerische UTF-8-Form &#20013;&#25991; (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-8

FAQ

Welche Zeichen wandelt das HTML-Encoding um?

Die fünf SGML-reservierten Zeichen: & → &amp;, < → &lt;, > → &gt;, " → &quot;, ' → &#39; (oder &apos;). 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 &#39; und &apos;?

Beide erzeugen ein einfaches Anführungszeichen. &apos; 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 &#39;. Die Seite gibt standardmäßig &#39; aus für maximale Kompatibilität.

Warum enthält meine Ausgabe immer noch &amp;?

Wenn die Eingabe bereits eine HTML-Entity wie &amp; enthält, ergibt das Encoding &amp;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.