Start · Sprachen · JavaScript · Referenz · escape()

escape()

Funktion

Erstellt einen neuen String, in dem bestimmte Zeichen durch hexadezimale Escape-Sequenzen ersetzt werden. <code>escape()</code> ist veraltet – stattdessen <code>encodeURIComponent()</code> verwenden.

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

Signatur

escape(string)

Beschreibung

escape() ist eine globale Funktion, die einen String entgegennimmt und eine URL-kodierte Darstellung zurückgibt, in der Sonderzeichen durch Escape-Sequenzen der Form %XX (für ASCII-Zeichen) bzw. %uXXXX (für Unicode-Zeichen außerhalb des ASCII-Bereichs) ersetzt werden. Buchstaben, Ziffern und die Zeichen @ * _ + - . / werden dabei nicht kodiert.

Wichtig: escape() ist seit ECMAScript 5 als deprecated markiert und sollte in modernem Code nicht mehr verwendet werden. Die Funktion verarbeitet Unicode-Zeichen nicht korrekt nach dem heutigen URI-Standard (RFC 3986) und liefert für Multi-Byte-UTF-8-Zeichen unerwartete Ergebnisse. Als Ersatz bieten sich encodeURIComponent() für einzelne URI-Komponenten oder encodeURI() für vollständige URIs an.

Die Gegenfunktion zu escape() ist unescape(), die ebenfalls als veraltet gilt. Für die Dekodierung moderner URIs stehen decodeURIComponent() und decodeURI() bereit.

escape() eignet sich heute allenfalls noch für die Arbeit mit sehr altem Code oder Legacy-Systemen, die explizit das %uXXXX-Format erwarten – in allen anderen Fällen sollte man auf die modernen Alternativen zurückgreifen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu kodierende String. Nicht-String-Werte werden vor der Verarbeitung in einen String umgewandelt.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String, in dem alle Zeichen außer A–Z a–z 0–9 @ * _ + - . / durch hexadezimale Escape-Sequenzen (%XX oder %uXXXX) ersetzt wurden.

Beispiele

Einfache Anwendung von escape()

// Veraltete Nutzung – nur zur Veranschaulichung
const encoded = escape('Hallo Welt! Preis: 5€');
console.log(encoded);
// Unicode-Zeichen wie € werden als %uXXXX kodiert

const decoded = unescape(encoded);
console.log(decoded);
Hallo%20Welt%21%20Preis%3A%205%u20AC Hallo Welt! Preis: 5€

Moderne Alternative: encodeURIComponent()

// So sollte es in modernem Code gemacht werden:
const suchbegriff = 'Kaffee & Kuchen für 3€';

// FALSCH (veraltet):
const altKodiert = escape(suchbegriff);
console.log('escape():           ', altKodiert);

// RICHTIG (modern, RFC 3986-konform):
const neuKodiert = encodeURIComponent(suchbegriff);
console.log('encodeURIComponent():', neuKodiert);

// Einbau in eine URL:
const url = `https://example.com/search?q=${neuKodiert}`;
console.log(url);
escape(): Kaffee%20%26%20Kuchen%20f%FCr%203%u20AC encodeURIComponent(): Kaffee%20%26%20Kuchen%20f%C3%BCr%203%E2%82%AC https://example.com/search?q=Kaffee%20%26%20Kuchen%20f%C3%BCr%203%E2%82%AC

// Wichtig · Fallstricke

Deprecated: escape() und das zugehörige unescape() sind seit ES5 als veraltet markiert und könnten in zukünftigen JavaScript-Engines entfernt werden – auch wenn das in der Praxis unwahrscheinlich ist, da viele Legacy-Systeme darauf angewiesen sind.

  • Falsche UTF-8-Kodierung: escape() kodiert Unicode-Zeichen als %uXXXX, was kein gültiges URI-Format nach RFC 3986 ist. Server und Browser können solche URLs falsch interpretieren.
  • Nicht URL-sicher: Das Zeichen / wird von escape() nicht kodiert, was bei Pfad-Segmenten zu Problemen führen kann.
  • Alternativen: Für URI-Komponenten encodeURIComponent() verwenden; für vollständige URIs encodeURI(); als Dekodierung decodeURIComponent() bzw. decodeURI().
  • Browser-Kompatibilität: escape() wird von allen Browsern und Node.js unterstützt, jedoch ausschließlich aus Kompatibilitätsgründen.