Wie Sie URLs kodieren und dekodieren

· 7 Min. Lesezeit

Wenn Sie jemals %20 in einer URL gesehen haben, wo ein Leerzeichen sein sollte, oder %C3%A9, wo ein akzentuiertes Zeichen hingehört, sind Sie auf URL-Kodierung gestoßen. Es ist ein grundlegender Bestandteil davon, wie das Web funktioniert, und es zu verstehen hilft Ihnen beim Debuggen kaputter Links, API-Probleme und Formularübermittlungen. Ein browserbasierter Encoder erledigt die gesamte Arbeit lokal, ohne Ihre Daten auf einen Server hochzuladen.

Was URL-Kodierung tut

URLs können nur einen begrenzten Satz von Zeichen sicher enthalten: Buchstaben (A-Z, a-z), Ziffern (0-9) und einige Sonderzeichen (-, _, ., ~). Alles andere (Leerzeichen, akzentuierte Zeichen, Emoji und Symbole wie &, =, #, ?) muss in ein sicheres Format konvertiert werden.

URL-Kodierung (auch Prozent-Kodierung genannt) ersetzt unsichere Zeichen durch ein % gefolgt von ihren hexadezimalen Bytewerten:

ZeichenKodiert
Leerzeichen%20
&%26
=%3D
#%23
?%3F
/%2F
@%40
:%3A
+%2B
,%2C
;%3B
(Zeilenumbruch)%0A
(Tabulator)%09

Wann Sie URL-Kodierung benötigen

So kodieren und dekodieren Sie

  1. Wählen Sie kodieren oder dekodieren: Wählen Sie die Richtung. Wählen Sie encodeURIComponent für Abfrageparameter oder encodeURI für vollständige URLs.
  2. Fügen Sie Ihre Eingabe ein: Geben Sie den Text oder die URL ein. Das Ergebnis wird sofort aktualisiert.
  3. Kopieren Sie die Ausgabe: Verwenden Sie das Ergebnis in Ihrem Code, Ihrer API-Anfrage oder Ihrem Browser.

Eine kurze Geschichte der URL-Kodierung

Die URL-Kodierung wurde im Dezember 1994 durch RFC 1738 zusammen mit der ursprünglichen URL-Spezifikation definiert. Der RFC wurde von Tim Berners-Lee (Erfinder des Webs) mit Eingaben der IETF URI Working Group geschrieben. Das ursprüngliche Kodierungsschema verwendete ASCII-Bytewerte: jedes reservierte oder unsichere Zeichen wurde als % gefolgt von zwei Hex-Ziffern kodiert.

Die Kodierung wurde mehrmals aktualisiert:

Die größte Änderung war die Umstellung auf UTF-8 in RFC 3986. Davor waren kodierte URLs nur ASCII, und nicht-lateinische Zeichen erforderten Workarounds (Punycode für Domains, IDN für internationale Adressen). Heute kodiert ein akzentuiertes «é» in einer URL zu %C3%A9 (seine zwei UTF-8-Bytes), nicht zu dem Latin-1-Byte %E9, das ältere Systeme produzieren würden.

encodeURI vs encodeURIComponent vs encodeURIFull

JavaScript hat drei Kodierungsfunktionen mit subtil unterschiedlichem Verhalten:

FunktionWas sie kodiertWas sie beibehältVerwenden für
encodeURI()Alle unsicheren ZeichenURL-Syntax: : / ? & = #Kodieren ganzer URLs
encodeURIComponent()Alle unsicheren Zeichen einschließlich URL-SyntaxNur A-Z a-z 0-9 - _ . ~ ! * ' ( )Abfrageparameterwerte
escape() (veraltet)Die meisten unsicheren ZeichenNur Latin-1Nicht verwenden

In Python:

In anderen Sprachen:

SpracheKomponentenkodierungVolle URI-Kodierung
JavaURLEncoder.encode() (mit Vorbehalten bei +)URI.toASCIIString()
C#Uri.EscapeDataStringUri.EscapeUriString
RubyCGI.escape()URI.encode_www_form_component
PHPrawurlencode()urlencode() (Hinweis: %2B vs +)
Gourl.QueryEscape()url.PathEscape()
Rustpercent_encoding cratepercent_encoding crate

Häufige Stolperfallen

Durchgearbeitete Beispiele

EingabeencodeURIencodeURIComponent
hello worldhello%20worldhello%20world
q=test&page=1q=test&page=1q%3Dtest%26page%3D1
https://x.com/pathhttps://x.com/pathhttps%3A%2F%2Fx.com%2Fpath
caf écaf%20%C3%A9caf%20%C3%A9
中文%E4%B8%AD%E6%96%87%E4%B8%AD%E6%96%87
100%100%25100%25
email@test.comemail@test.comemail%40test.com

Tipps

Datenschutz und vertrauliche URLs

Der URL-Encoder und -Decoder laufen vollständig in Ihrem Browser. Die URLs, die Sie einfügen, die Zwischenverarbeitung und die kodierte/dekodierte Ausgabe bleiben alle auf Ihrem Gerät. Nichts wird auf einen Server hochgeladen, protokolliert oder mit irgendjemandem geteilt.

Dies ist wichtig, weil URLs häufig extrem sensible Daten enthalten: API-Schlüssel und Token in Abfrageparametern, OAuth-Autorisierungscodes, die Kontozugriff gewähren, Session-IDs, signierte URLs für private S3-Buckets mit eingebetteten Anmeldeinformationen, Magic-Link-Login-Token, Passwort-Reset-URLs, interne Administrator-URLs, die die Produktstruktur enthüllen, Kunden-E-Mail-Adressen in Abmeldelinks, persönliche Daten in Formularübermittlungen. Cloud-URL-Encoder protokollieren jedes Einfügen, behalten sie manchmal zur «Service-Verbesserung» und waren an echten Lecks beteiligt, bei denen eingefügte Authentifizierungstoken von Angreifern extrahiert wurden, die die Protokolle überwachen. Ein browserbasierter Encoder hat null Exposition: Die URL verlässt niemals Ihren Computer.

Browserbasierte Kodierung funktioniert auch offline, sobald die Seite geladen ist, nützlich für die Kodierung von URLs in Flugzeugen, in sicheren Umgebungen ohne Internetzugang oder überall dort, wo Sie keine authentifizierungstragenden URLs in einen Drittanbieterdienst einfügen können oder sollten.

Häufig gestellte Fragen

Was ist der Unterschied zwischen encodeURI und encodeURIComponent?

encodeURI bewahrt Zeichen, die in einer URL-Struktur gültig sind (Schrägstriche, Doppelpunkte, Fragezeichen). encodeURIComponent kodiert alles außer Buchstaben, Ziffern und einigen sicheren Zeichen. Verwenden Sie encodeURIComponent für Query-Parameterwerte und encodeURI für vollständige URLs.

Warum werden Leerzeichen zu %20 oder +?

In der URL-Kodierung werden Leerzeichen zu %20. In Formulardaten (application/x-www-form-urlencoded) werden Leerzeichen zu +. Beides ist im jeweiligen Kontext gültig, aber %20 ist der universelle Standard für URLs.

Muss ich meine URLs manuell kodieren?

In den meisten Fällen kümmert sich Ihre Programmiersprache oder Ihr Framework automatisch um die Kodierung. Manuelles Kodieren ist nötig, wenn Sie URLs von Hand bauen, API-Anfragen debuggen oder mit Query-Strings arbeiten, die Sonderzeichen enthalten.

Werden meine Daten an einen Server gesendet?

Nein. Sämtliches Kodieren und Dekodieren erfolgt in Ihrem Browser.