[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent [Back]  [Original]

encodeURIComponent() - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

encodeURIComponent()

Baseline Weitgehend verfgbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.

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 reprsentieren (wird nur vier Escape-Sequenzen fr Zeichen setzen, die aus zwei Surrogat-Zeichen bestehen). Im Vergleich zu encodeURI() kodiert diese Funktion mehr Zeichen, einschlielich solcher, die Teil der URI-Syntax sind.

In diesem Artikel

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

js
encodeURIComponent(uriComponent)

Parameter

uriComponent

Ein String, der als URI-Komponente (ein Pfad, Abfragezeichenfolge, Fragment usw.) kodiert werden soll. Andere Werte werden in Strings umgewandelt.

Rckgabewert

Ein neuer String, der die bereitgestellte uriComponent als URI-Komponente kodiert darstellt.

Ausnahmen

URIError

Ausgelst, wenn uriComponent ein einzelnes Surrogat enthlt.

Beschreibung

encodeURIComponent() ist eine Funktions-Eigenschaft des globalen Objekts.

encodeURIComponent() verwendet denselben Kodierungsalgorithmus wie in encodeURI() beschrieben. Es entzieht alle Zeichen auer:

AZ az 09 - _ . ! ~ * ' ( )

Im Vergleich zu encodeURI(), entzieht encodeURIComponent() eine grere Reihe von Zeichen. Verwenden Sie encodeURIComponent() fr von Benutzern eingegebene Felder aus Formularen, die an den Server gesendet werden dies kodiert &-Symbole, die mglicherweise versehentlich whrend der Dateneingabe fr Zeichenreferenzen oder andere Zeichen erzeugt werden, die eine Kodierung/Decodierung erfordern. Beispielsweise knnte ohne encodeURIComponent() das &-Zeichen als Anfang eines neuen Feldes auf dem Server interpretiert werden und die Datenintegritt gefhrden, wenn ein Benutzer Jack & Jill schreibt.

Fr application/x-www-form-urlencoded sollen Leerzeichen durch + ersetzt werden, daher mchte man mglicherweise eine encodeURIComponent()-Ersetzung mit einer zustzlichen Ersetzung von %20 durch + ergnzen.

Beispiele

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):

js
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 fr RFC3986

Die neuere RFC3986 reserviert !, ', (, ) und *, obwohl diese Zeichen keine formellen URI-Begrenzungsverwendungen haben. Die folgende Funktion kodiert einen String fr 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.

js
function encodeRFC3986URIComponent(str) {
  return encodeURIComponent(str).replace(
    /[!'()*]/g,
    (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,
  );
}

Kodierung eines einzelnen Surrogats lst eine Ausnahme aus

Ein URIError wird ausgelst, wenn man versucht, ein Surrogat zu kodieren, das kein Teil eines Hoch-Tief-Paars ist. Zum Beispiel:

js
// 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 knnen String.prototype.toWellFormed() verwenden, das einzelne Surrogate mit dem Unicode-Ersatzzeichen (U+FFFD) ersetzt, um diesen Fehler zu vermeiden. Sie knnen auch String.prototype.isWellFormed() verwenden, um zu berprfen, ob ein String einzelne Surrogate enthlt, bevor Sie ihn an encodeURIComponent() bergeben.

Spezifikationen

Spezifikation
ECMAScript 2027 LanguageSpecification
# sec-encodeuricomponent-uricomponent

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page