So funktioniert es
Die URL-Codierung (Percent-Encoding) ersetzt Zeichen, die nicht wörtlich in einer Adresse erscheinen können, durch %XX-Sequenzen mit ihrem Bytewert. Zum Beispiel wird das Leerzeichen zu %20.
Der Geltungsbereich „Komponente“ maskiert auch die reservierten Zeichen (= & / ? #): Verwende ihn für den Wert eines Parameters. „Vollständige URL“ bewahrt die Adressstruktur: Verwende sie für eine ganze URL.
In HTML-Formularen wird das Leerzeichen als + codiert (application/x-www-form-urlencoded); in allen anderen Fällen wird gemäß dem Standard RFC 3986 %20 verwendet.
Beispiele
hola mundo & máshola%20mundo%20%26%20m%C3%A1sDas „&“ wird maskiert (%26), damit es nicht mit einem Parametertrennzeichen verwechselt wird; „á“ wird in UTF-8 codiert (%C3%A1).a=1&b=2a%3D1%26b%3D2https://sitio.com/á b?x=1 2URL completa: https://sitio.com/%C3%A1%20b?x=1%202Im Modus „Vollständige URL“ bleiben ://, / und ? erhalten; nur was die Adresse beschädigen würde, wird maskiert.Anwendungsfälle
- Query-Parameter sicher zusammenstellen, wenn eine URL von Hand gebaut wird.
- Werte codieren, die &, =, Leerzeichen oder Akzente enthalten, bevor sie in einer GET-Anfrage gesendet werden.
- Eine URL decodieren, um zu lesen, welche Werte jeder Parameter trägt.
- application/x-www-form-urlencoded-Bodies für den Formularversand vorbereiten.
Häufige Fragen
Was ist der Unterschied zwischen „Komponente“ und „Vollständige URL“?
„Komponente“ (encodeURIComponent) maskiert auch =, &, /, ?, # — für einen einzelnen Wert. „Vollständige URL“ (encodeURI) bewahrt diese Strukturzeichen — für eine ganze URL.
Wann verwendet man + und wann %20 für ein Leerzeichen?
Das + gilt nur für den Body von Formularen (application/x-www-form-urlencoded). Im übrigen Teil der URL ist der Standard für das Leerzeichen %20.
Warum wird „á“ zu %C3%A1 und nicht zu einem einzelnen %XX?
Weil es in UTF-8 codiert wird: Nicht-ASCII-Zeichen belegen mehrere Bytes, und jedes Byte wird durch seine eigene %XX-Sequenz dargestellt.
Macht das Codieren einer URL sie sicher?
Nein. Es macht sie nur auf Syntaxebene gültig. Es ist keine Verschlüsselung und schützt den Inhalt in keiner Weise.