Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. encodeURI()

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

View in EnglishAlways switch to English

encodeURI()

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⁩.

DieencodeURI()-Funktion kodiert eineURI, indem jede Instanz bestimmter Zeichen durch eine, zwei, drei oder vier Escape-Sequenzen ersetzt wird, die dieUTF-8-Kodierung des Zeichens darstellen (vier Escape-Sequenzen nur für Zeichen, die aus zwei Ersatzzeichen bestehen). Im Vergleich zuencodeURIComponent() kodiert diese Funktion weniger Zeichen und erhält jene, die Teil der URI-Syntax sind.

Probieren Sie es aus

const uri = "https://mozilla.org/?x=шеллы";const encoded = encodeURI(uri);console.log(encoded);// Expected output: "https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"try {  console.log(decodeURI(encoded));  // Expected output: "https://mozilla.org/?x=шеллы"} catch (e) {  // Catches a malformed URI  console.error(e);}

Syntax

js
encodeURI(uri)

Parameter

uri

Ein zu kodierender String als URI.

Rückgabewert

Ein neuer String, der den bereitgestellten String als URI kodiert darstellt.

Ausnahmen

URIError

Wird ausgelöst, wennuri eineneinsamen Ersatz enthält.

Beschreibung

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

DieencodeURI()-Funktion maskiert Zeichen durch UTF-8-Code-Einheiten, wobei jedes Oktett im Format%XX kodiert wird, bei Bedarf mit 0 aufgefüllt. Da einsame Ersatzzeichen in UTF-16 keinen gültigen Unicode-Charakter kodieren, führt ihre Verwendung zu einemURIError mitencodeURI().

encodeURI() maskiert alle Zeichenaußer:

A–Z a–z 0–9 - _ . ! ~ * ' ( ); / ? : @ & = + $ , #

Die Zeichen in der zweiten Zeile sind Zeichen, die Teil der URI-Syntax sein können und werden nur vonencodeURIComponent() maskiert. SowohlencodeURI() als auchencodeURIComponent() kodieren nicht die Zeichen-.!~*'(), bekannt als "unreservierte Marken", die keinen reservierten Zweck haben, aber in einer URI "wie sie sind" erlaubt sind. (SieheRFC2396)

DieencodeURI()-Funktion kodiert keine Zeichen, die eine spezielle Bedeutung (reservierte Zeichen) für eine URI haben. Das folgende Beispiel zeigt alle Teile, die eine URI möglicherweise enthalten kann. Beachten Sie, wie bestimmte Zeichen verwendet werden, um spezielle Bedeutungen anzuzeigen:

url
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor

encodeURI, wie der Name schon sagt, wird verwendet, um eine URL als Ganzes zu kodieren, vorausgesetzt, sie ist bereits gut geformt. Wenn Sie Zeichenfolgenwerte dynamisch zu einer URL zusammensetzen möchten, sollten Sie wahrscheinlichencodeURIComponent() für jedes dynamische Segment verwenden, um URL-Syntaxzeichen an unerwünschten Stellen zu vermeiden.

js
const name = "Ben & Jerry's";// This is bad:const link = encodeURI(`https://example.com/?choice=${name}`); // "https://example.com/?choice=Ben%20&%20Jerry's"console.log([...new URL(link).searchParams]); // [['choice', 'Ben '], [" Jerry's", '']// Instead:const link = encodeURI(  `https://example.com/?choice=${encodeURIComponent(name)}`,);// "https://example.com/?choice=Ben%2520%2526%2520Jerry's"console.log([...new URL(link).searchParams]); // [['choice', "Ben%20%26%20Jerry's"]]

Beispiele

encodeURI() vs. encodeURIComponent()

encodeURI() unterscheidet sich vonencodeURIComponent() wie folgt:

js
const set1 = ";/?:@&=+$,#"; // Reserved Charactersconst set2 = "-.!~*'()"; // Unreserved Marksconst set3 = "ABC abc 123"; // Alphanumeric Characters + Spaceconsole.log(encodeURI(set1)); // ;/?:@&=+$,#console.log(encodeURI(set2)); // -.!~*'()console.log(encodeURI(set3)); // ABC%20abc%20123 (the space gets encoded as %20)console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23console.log(encodeURIComponent(set2)); // -.!~*'()console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (the space gets encoded as %20)

Kodierung eines einsamen Ersatzes führt zu Fehler

EinURIError wird ausgelöst, wenn versucht wird, einen Ersatz zu kodieren, der nicht Teil eines High-Low-Paars ist. Zum Beispiel:

js
// High-low pair OKencodeURI("\uD800\uDFFF"); // "%F0%90%8F%BF"// Lone high-surrogate code unit throws "URIError: malformed URI sequence"encodeURI("\uD800");// Lone low-surrogate code unit throws "URIError: malformed URI sequence"encodeURI("\uDFFF");

Sie könnenString.prototype.toWellFormed() verwenden, welches einsame Ersatzzeichen durch das Unicode-Ersatzzeichen (U+FFFD) ersetzt, um diesen Fehler zu vermeiden. Sie können auchString.prototype.isWellFormed() verwenden, um zu überprüfen, ob ein String einsame Ersatzzeichen enthält, bevor Sie ihn anencodeURI() übergeben.

Kodierung für RFC3986

Der neuereRFC3986 macht eckige Klammern fürIPv6 reserviert und lässt sie daher nicht kodieren, wenn etwas gebildet wird, das Teil einer URL sein könnte (wie zum Beispiel ein Host). Er reserviert auch !, ', (, ), und *, obwohl diese Zeichen keine formalisierten URI-abgrenzenden Verwendungen haben. Die folgende Funktion kodiert einen String für das RFC3986-konforme URL-Format.

js
function encodeRFC3986URI(str) {  return encodeURI(str)    .replace(/%5B/g, "[")    .replace(/%5D/g, "]")    .replace(      /[!'()*]/g,      (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,    );}

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-encodeuri-uri

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp