FAQ5 Min. Lesezeit

Leerzeichen in URLs kodieren: %20 vs. + (Wann was verwenden)

%20 ist die standardmäßige Prozentkodierung nach RFC 3986 für ein Leerzeichen und sollte in URL-Pfaden und den meisten Kontexten verwendet werden. Das Pluszeichen + steht nur im Format application/x-www-form-urlencoded für ein Leerzeichen, das bei HTML-Formularübermittlungen und in manchen Query-Strings zum Einsatz kommt.

Was bedeutet %20?

%20 ist die prozentkodierte Darstellung des Leerzeichens (ASCII-Code 32, hexadezimal 0x20), wie sie in RFC 3986 definiert ist. Es ist die standardmäßige Art, Leerzeichen in jedem Teil eines URI darzustellen, einschließlich Pfadsegmenten, Query-Strings und Fragmentbezeichnern.

Wenn du %20 in einer URL siehst, bedeutet das schlicht: „Hier steht ein Leerzeichen." Zum Beispiel verweist https://example.com/my%20file.pdf auf eine Ressource mit dem Namen „my file.pdf". Das %20 wird von allen Webservern, Browsern und HTTP-Bibliotheken einheitlich verstanden.

Was bedeutet + in einer URL?

Dass das +-Zeichen ein Leerzeichen darstellt, stammt vom Content-Type application/x-www-form-urlencoded, der in der HTML-Spezifikation zur Kodierung von Formulardaten definiert wurde. Wenn ein HTML-Formular per GET-Methode abgeschickt wird, kodiert der Browser Leerzeichen im resultierenden Query-String als +.

Gibst du zum Beispiel „hello world" in ein Suchformular ein und schickst es ab, erzeugt der Browser eine URL wie https://example.com/search?q=hello+world. Das + bedeutet hier „Leerzeichen", aber nur deshalb, weil der Query-String das Format form-urlencoded verwendet.

Wichtig zu wissen: Außerhalb des Formats application/x-www-form-urlencoded hat + keine besondere Bedeutung. In einem URL-Pfad wie /files/my+file.pdf ist das + ein wörtliches Pluszeichen, kein Leerzeichen. Die referenzierte Datei heißt buchstäblich „my+file.pdf".

Der entscheidende Unterschied

Der grundlegende Unterschied liegt in der Spezifikation, zu der die jeweilige Kodierung gehört. %20 ist in RFC 3986 (URIs) definiert und funktioniert überall in einer URL. Die Konvention + als Leerzeichen ist in der HTML-/WHATWG-Spezifikation für Formulardaten definiert und funktioniert nur in Query-Strings, die ausdrücklich als form-urlencoded-Daten behandelt werden.

  • %20 funktioniert in Pfaden, Query-Strings, Fragmenten und allen URI-Kontexten
  • + bedeutet nur in application/x-www-form-urlencoded-Query-Strings „Leerzeichen"
  • In URL-Pfaden ist + ein wörtliches Pluszeichen, kein Leerzeichen
  • %20 ist immer sicher; + ist kontextabhängig
  • Wenn du ein wörtliches + in Formulardaten kodierst, wird daraus %2B

Was solltest du verwenden?

Verwende %20, wenn du URLs programmatisch erstellst, REST-API-Anfragen zusammenbaust, Pfadsegmente kodierst oder wann immer du unsicher bist. Es ist die universell korrekte Kodierung für Leerzeichen in URIs.

Verwende + nur dann, wenn du bewusst application/x-www-form-urlencoded-Daten erzeugst, etwa beim Erstellen von Query-Strings, die HTML-Formularübermittlungen nachbilden, oder wenn eine API ausdrücklich dieses Format verlangt.

Die meisten modernen APIs und Frameworks akzeptieren sowohl %20 als auch + in Query-Strings. Die Verwendung von %20 ist jedoch portabler und vermeidet Mehrdeutigkeiten, besonders wenn der Query-String auch in Kontexten außerhalb von Formularübermittlungen verwendet werden könnte.

Wie verschiedene Sprachen mit Leerzeichen umgehen

Verschiedene Programmiersprachen und ihre Standardbibliotheken verwenden standardmäßig entweder %20 oder + zur Kodierung von Leerzeichen. Wenn du das Standardverhalten deiner Sprache kennst, vermeidest du böse Überraschungen.

// JavaScript
encodeURIComponent('hello world');  // "hello%20world" (%20)
new URLSearchParams({q: 'hello world'}).toString();  // "q=hello+world" (+)

// Um %20 in Query-Strings zu erzwingen:
new URLSearchParams({q: 'hello world'}).toString().replace(/\+/g, '%20');
# Python
from urllib.parse import quote, quote_plus, urlencode

quote('hello world', safe='')    # "hello%20world" (%20)
quote_plus('hello world')        # "hello+world" (+)
urlencode({'q': 'hello world'})  # "q=hello+world" (+ standardmäßig)

# Um %20 zu erzwingen:
urlencode({'q': 'hello world'}, quote_via=quote)  # "q=hello%20world"
// PHP
rawurlencode('hello world');  // "hello%20world" (%20)
urlencode('hello world');     // "hello+world" (+)

// rawurlencode folgt RFC 3986
// urlencode folgt application/x-www-form-urlencoded

Verwandte Artikel

Testen Sie unsere kostenlosen Tools