Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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.
In diesem Artikel
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
encodeURI(uri)Parameter
uriEin zu kodierender String als URI.
Rückgabewert
Ein neuer String, der den bereitgestellten String als URI kodiert darstellt.
Ausnahmen
URIErrorWird ausgelöst, wenn
urieineneinsamen 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:
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchorencodeURI, 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.
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:
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:
// 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.
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> |