Sprache: Deutsch

tools / escape

escape/

HTML-Entities, Unicode \uXXXX und JS-Strings escapen und unescapen.

Klartext

Escape-Ergebnis

Häufige Fragen

Was ist der Unterschied zwischen HTML-Entities, Unicode- und JS-String-Escaping?

Es sind drei verschiedene Schreibweisen; du wählst danach, wohin der Text soll. HTML-Entities sehen aus wie & und < und bringen Text sicher in eine Webseite; Unicode-Escapes sind Codepoints wie \u4f60 und kommen häufig in JSON und Logs vor; das JS-String-Escaping behandelt Anführungszeichen, Backslashes und Zeilenumbrüche, damit der Text in JavaScript-Code stehen kann.

Welche Zeichen ändert das HTML-Escaping, und ändert sich chinesischer Text?

Nur fünf Zeichen: & wird zu &amp;, < zu &lt;, > zu &gt;, ein doppeltes Anführungszeichen zu &quot; und ein einfaches zu &#39;. Chinesischer Text, Leerzeichen, Zeilenumbrüche und alles andere bleiben unverändert, und es entstehen keine Formen wie &#x4E2D;. Für HTML-Fließtext oder einen Attributwert in Anführungszeichen sind genau diese fünf zu escapen.

Warum bleiben beim HTML-Unescapen manche &xxx;-Entities unverändert?

Benannte Entities, die das Tool nicht kennt, bleiben unverändert und lösen keinen Fehler aus. Eingebaut ist eine Auswahl gängiger (lateinische und griechische Buchstaben, Satzzeichen, Währungen, Pfeile, mathematische Symbole usw.); die Namen unterscheiden Groß- und Kleinschreibung, und das abschließende Semikolon ist Pflicht. Für einen nicht eingebauten Namen schreibst du eine numerische Entity wie &#20013; oder &#x4E2D;, die sich dekodieren lässt. Hat eine numerische Entity den Codepoint 0, einen Wert über 10FFFF oder liegt sie im Surrogatbereich, wird sie zum Ersetzungszeichen �.

Wie funktioniert Unicode-Escaping, und warum wird ein Emoji zu zwei \u-Teilen?

Das Unicode-Escaping behandelt nur Nicht-ASCII-Zeichen; Buchstaben, Ziffern und Symbole bleiben unverändert, aus „你好 abc“ wird also \u4f60\u597d abc, mit kleingeschriebenen Hexziffern. Zeichen außerhalb der BMP wie Emojis werden wie in JavaScript in ein Surrogatpaar zerlegt und als zwei Teile geschrieben, etwa \ud83d\ude00. Beim Unescapen werden sowohl \uXXXX als auch \u{…} erkannt, benachbarte Surrogatpaare werden wieder zu einem Zeichen zusammengefügt, und ein fehlerhaftes \u bleibt unverändert, ohne Fehlermeldung.

Kann ich das Ergebnis des JS-String-Escapings direkt in Code einfügen?

Ja, setze es einfach in Anführungszeichen; einfache und doppelte funktionieren beide, weil beide Arten escapet werden. Backslashes, Zeilenumbrüche und Tabulatoren werden zu \\ \n \t, andere Steuerzeichen als \xHH geschrieben, chinesischer Text wird nicht escapet. Backticks und ${ werden nicht escapet; kommt der Text in ein Template-Literal, musst du das selbst übernehmen.

Was bedeutet die Meldung „Unescapen fehlgeschlagen: Zeichen N: …“?

Hinter dem Backslash an dieser Stelle steht etwas Ungültiges. Im Modus „JS-String“ müssen nach \x zwei Hexadezimalziffern folgen, nach \u vier (oder 1 bis 6 innerhalb von \u{…}); Oktal-Escapes wie \1 bis \7 werden nicht unterstützt, und ein einzelner Backslash ganz am Ende ist ebenfalls ein Fehler. Häufige Ursache ist ein eingefügter Windows-Pfad: In C:\users ist das \u kein gültiges Escape. Backslashes in Pfaden müssen ohnehin nicht unescapet werden.

Kann ich das escapete Ergebnis als JSON-String verwenden?

Beim Unescapen ja, beim Escapen nein. Sequenzen wie \n, \", \/ und \uXXXX in einem JSON-String lassen sich mit dem Unescapen im Modus „JS-String“ wieder in den Originaltext zurückverwandeln. In Escape-Richtung wird ein einfaches Anführungszeichen aber als \' und ein Steuerzeichen als \xHH geschrieben, und beides kennt JSON nicht. Für einen gültigen JSON-String nimm JSON.stringify.

Wird mein Text hochgeladen, und ist es sicher, Inhalte unbekannter Herkunft einzufügen?

Nichts wird hochgeladen: Escapen und Unescapen laufen im Browser, und es gibt keine Obergrenze für die Zeichenzahl; bei mehr als einer Million Zeichen wartet die Seite, bis du 0,5 Sekunden pausierst, und rechnet dann erst. Das HTML- und JS-Unescapen parst das Tool selbst Stück für Stück, ohne das DOM der Seite und ohne eval; fügst du etwas wie <script> ein, erhältst du nur Text, der nie ausgeführt wird.