Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
encodeURI()
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La fonctionencodeURI() encode un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant le caractère encodé en UTF-8 (les quatre séquences d'échappement ne seront utilisées que si le caractère est composé de deux caractères «surrogate »).
Dans cet article
Exemple interactif
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);}Syntaxe
encodeURI(URI);Paramètres
URIUn Uniform Resource Identifier complet.
Valeur de retour
Une nouvelle chaîne de caractères représentant un URI, encodé, à partir de la chaîne de caractères passée en argument.
Description
encodeURI() échappe tous les caractères sauf ceux-ci :
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
encodeURI() est différente deencodeURIComponent. Par exemple :
var set1 = ";,/?:@&=+$#"; // Caractères réservésvar set2 = "-_.!~*'()"; // Caractères non-réservésvar set3 = "ABC abc 123"; // Caractères alphanumériques et espaceconsole.log(encodeURI(set1)); // ;,/?:@&=+$#console.log(encodeURI(set2)); // -_.!~*'()console.log(encodeURI(set3)); // ABC%20abc%20123 (l'espace est encodé en %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 (l'espace est encodé en %20)Une exceptionURIError sera levée si on tente d'encoder un caractèresurrogate (demi-codet) qui ne fait pas partie d'une paire :
// On a une paire de codets surrogateconsole.log(encodeURI("\uD800\uDFFF"));// Ici, seul le caractère "haut"// ce qui déclenche une "URIError: malformed URI sequence"console.log(encodeURI("\uD800"));// Ici, seul le caractère "bas"// ce qui déclenche une "URIError: malformed URI sequence"console.log(encodeURI("\uDFFF"));encodeURI() ne permet pas de former des requêtes HTTP GET ou POST (par exemple avecXMLHTTPRequest) car "&", "+" et "=" ne sont pas encodés et sont traités comme des caractères spéciaux (toutefois, la méthode.encodeURIComponent pourra être utilisée pour encoder ces caractères).
Si on souhaite suivre laRFC3986 qui concerne les URL et qui rend les crochets réservés (pour IPv6) (il ne faut donc plus encoder ces caractères lorsqu'ils font partie d'une URL (notamment pour la partie représentant l'hôte), on pourra utiliser le fragment de code suivant :
function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, "[").replace(/%5D/g, "]");}Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-encodeuri-uri> |