encodeURIComponent()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Die encodeURIComponent()-Funktion kodiert eine URI, indem sie jede Instanz bestimmter Zeichen durch eine, zwei, drei oder vier Escape-Sequenzen ersetzt, die die UTF-8-Kodierung des Zeichens repräsentieren (wird nur vier Escape-Sequenzen für Zeichen setzen, die aus zwei Surrogat-Zeichen bestehen). Im Vergleich zu encodeURI() kodiert diese Funktion mehr Zeichen, einschließlich solcher, die Teil der URI-Syntax sind.
Probieren Sie es aus
// Encodes characters such as ?,=,/,&,:
console.log(`?x=${encodeURIComponent("test?")}`);
// Expected output: "?x=test%3F"
console.log(`?x=${encodeURIComponent("шеллы")}`);
// Expected output: "?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
Syntax
encodeURIComponent(uriComponent)
Parameter
uriComponent-
Ein String, der als URI-Komponente (ein Pfad, Abfragezeichenfolge, Fragment usw.) kodiert werden soll. Andere Werte werden in Strings umgewandelt.
Rückgabewert
Ein neuer String, der die bereitgestellte uriComponent als URI-Komponente kodiert darstellt.
Ausnahmen
URIError-
Ausgelöst, wenn
uriComponentein einzelnes Surrogat enthält.
Beschreibung
encodeURIComponent() ist eine Funktions-Eigenschaft des globalen Objekts.
encodeURIComponent() verwendet denselben Kodierungsalgorithmus wie in encodeURI() beschrieben. Es entzieht alle Zeichen außer:
A–Z a–z 0–9 - _ . ! ~ * ' ( )
Im Vergleich zu encodeURI(), entzieht encodeURIComponent() eine größere Reihe von Zeichen. Verwenden Sie encodeURIComponent() für von Benutzern eingegebene Felder aus Formularen, die an den Server gesendet werden — dies kodiert &-Symbole, die möglicherweise versehentlich während der Dateneingabe für Zeichenreferenzen oder andere Zeichen erzeugt werden, die eine Kodierung/Decodierung erfordern. Beispielsweise könnte ohne encodeURIComponent() das &-Zeichen als Anfang eines neuen Feldes auf dem Server interpretiert werden und die Datenintegrität gefährden, wenn ein Benutzer Jack & Jill schreibt.
Für application/x-www-form-urlencoded sollen Leerzeichen durch + ersetzt werden, daher möchte man möglicherweise eine encodeURIComponent()-Ersetzung mit einer zusätzlichen Ersetzung von %20 durch + ergänzen.
Beispiele
>Kodierung für Content-Disposition und Link-Header
Das folgende Beispiel bietet die spezielle Kodierung, die innerhalb von UTF-8 Content-Disposition und Link Serverantwort-Header-Parametern erforderlich ist (z.B. UTF-8 Dateinamen):
const fileName = "my file(2).txt";
const header = `Content-Disposition: attachment; filename*=UTF-8''${encodeRFC5987ValueChars(
fileName,
)}`;
console.log(header);
// "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
function encodeRFC5987ValueChars(str) {
return (
encodeURIComponent(str)
// The following creates the sequences %27 %28 %29 %2A (Note that
// the valid encoding of "*" is %2A, which necessitates calling
// toUpperCase() to properly encode). Although RFC3986 reserves "!",
// RFC5987 does not, so we do not need to escape it.
.replace(
/['()*]/g,
(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,
)
// The following are not required for percent-encoding per RFC5987,
// so we can allow for a little better readability over the wire: |`^
.replace(/%(7C|60|5E)/g, (str, hex) =>
String.fromCharCode(parseInt(hex, 16)),
)
);
}
Kodierung für RFC3986
Die neuere RFC3986 reserviert !, ', (, ) und *, obwohl diese Zeichen keine formellen URI-Begrenzungsverwendungen haben. Die folgende Funktion kodiert einen String für das RFC3986-konforme URL-Komponenten-Format. Sie kodiert auch [ und ], die Teil der IPv6 URI-Syntax sind. Eine RFC3986-konforme encodeURI-Implementierung sollte diese nicht entziehen, was im encodeURI() Beispiel demonstriert wird.
function encodeRFC3986URIComponent(str) {
return encodeURIComponent(str).replace(
/[!'()*]/g,
(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,
);
}
Kodierung eines einzelnen Surrogats löst eine Ausnahme aus
Ein URIError wird ausgelöst, wenn man versucht, ein Surrogat zu kodieren, das kein Teil eines Hoch-Tief-Paars ist. Zum Beispiel:
// High-low pair OK
encodeURIComponent("\uD800\uDFFF"); // "%F0%90%8F%BF"
// Lone high-surrogate code unit throws "URIError: malformed URI sequence"
encodeURIComponent("\uD800");
// Lone high-surrogate code unit throws "URIError: malformed URI sequence"
encodeURIComponent("\uDFFF");
Sie können String.prototype.toWellFormed() verwenden, das einzelne Surrogate mit dem Unicode-Ersatzzeichen (U+FFFD) ersetzt, um diesen Fehler zu vermeiden. Sie können auch String.prototype.isWellFormed() verwenden, um zu überprüfen, ob ein String einzelne Surrogate enthält, bevor Sie ihn an encodeURIComponent() übergeben.
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-encodeuricomponent-uricomponent> |
Browser-Kompatibilität
Loading…