Start · Sprachen · JavaScript · Referenz · unescape()

unescape()

Funktion

Ersetzt in einem String hexadezimale Escape-Sequenzen (z. B. <code>%xx</code> oder <code>%uxxxx</code>) durch die entsprechenden Zeichen.

seit JavaScript ES1 (veraltet) deprecated seit ja Kategorie: core

Signatur

unescape(str)

Beschreibung

unescape() ist eine globale Funktion, die einen neuen String erzeugt, indem sie hexadezimale Escape-Sequenzen der Form %xx (2-stellig) und %uxxxx (4-stellig für Unicode-Zeichen) durch die Zeichen ersetzt, die sie repräsentieren. Sie ist das Gegenstück zur ebenfalls veralteten Funktion escape().

Wichtig: unescape() ist seit ECMAScript 5 offiziell als veraltet (deprecated) markiert und sollte in modernem Code nicht mehr verwendet werden. Die Funktion ist ausschließlich aus Gründen der Rückwärtskompatibilität weiterhin verfügbar. Für das Dekodieren von URL-Bestandteilen sollten stattdessen decodeURIComponent() oder decodeURI() eingesetzt werden.

Der Unterschied zu den modernen Alternativen liegt im Zeichenumfang und der Kodierungsstrategie: unescape() verarbeitet nur das Latin-1-Subset und Unicode-Sequenzen im proprietären %uxxxx-Format, das nicht Teil des URI-Standards ist. decodeURIComponent() hingegen folgt dem RFC-3986-Standard und dekodiert UTF-8-kodierte Byte-Triplets (%C3%A4 für „ä"), wie sie von modernen Webstandards erwartet werden.

Der Rückgabewert ist immer ein neuer String; die ursprüngliche Zeichenkette bleibt unverändert. Sequenzen, die nicht als gültige Escape-Sequenzen erkannt werden, werden unverändert in den Ergebnis-String übernommen.

Parameter

Name Typ Default Beschreibung
$str Pflicht string Der zu dekodierender String, der hexadezimale Escape-Sequenzen der Form %xx oder %uxxxx enthalten kann.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String, in dem alle erkannten Escape-Sequenzen durch die entsprechenden Zeichen ersetzt wurden. Nicht erkannte Sequenzen werden unverändert übernommen.

Beispiele

Einfache Escape-Sequenzen dekodieren

// %xx-Format (Latin-1)
const encoded = 'Hallo%20Welt%21';
const decoded = unescape(encoded);
console.log(decoded);
Hallo Welt!

Unicode-Sequenzen im %uxxxx-Format

// %uxxxx-Format für Unicode-Zeichen
const unicodeEncoded = '%u00e4%u00f6%u00fc'; // ä, ö, ü
const result = unescape(unicodeEncoded);
console.log(result);
äöü

Moderner Ersatz: decodeURIComponent()

// EMPFOHLEN: decodeURIComponent() statt unescape()
const urlEncoded = 'Stra%C3%9Fe%20und%20Weg';

// unescape() kann UTF-8-Byte-Triplets NICHT korrekt dekodieren:
console.log(unescape(urlEncoded));        // falsch: "StraÃe und Weg"

// decodeURIComponent() verarbeitet UTF-8 korrekt:
console.log(decodeURIComponent(urlEncoded)); // korrekt: "Straße und Weg"
StraÃe und Weg Straße und Weg

// Wichtig · Fallstricke

Veraltet (Deprecated): unescape() ist seit ES5 offiziell als veraltet markiert. Viele JavaScript-Engines und Lint-Tools warnen bei seiner Verwendung. In zukünftigen Sprachversionen oder strikten Umgebungen könnte die Funktion entfernt werden.

  • Falsche UTF-8-Dekodierung: unescape() versteht kein UTF-8. Moderne URLs kodieren Nicht-ASCII-Zeichen als mehrteilige %xx-Byte-Triplets (z. B. %C3%A4 für „ä"). unescape() interpretiert diese als separate Latin-1-Zeichen und liefert korrumpierten Text.
  • Kein Standard-URL-Format: Das %uxxxx-Format ist kein Teil des URI-Standards (RFC 3986) und wird von anderen Systemen nicht verstanden.
  • Empfohlene Alternativen: decodeURIComponent() für einzelne URL-Komponenten (Query-Parameter, Pfadsegmente), decodeURI() für vollständige URIs.