La fonction encodeURI() 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 »).
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
Syntaxe
encodeURI(URI)
Paramètres
URI- Un 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 de encodeURIComponent. Par exemple :
var set1 = ";,/?:@&=+$#"; // Caractères réservés var set2 = "-_.!~*'()"; // Caractères non-réservés var set3 = "ABC abc 123"; // Caractères alphanumériques et espace console.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%23 console.log(encodeURIComponent(set2)); // -_.!~*'() console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (l'espace est encodé en %20)
Une exception URIError sera levée si on tente d'encoder un caractère surrogate (demi-codet) qui ne fait pas partie d'une paire :
// On a une paire de codets surrogate
console.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 avec XMLHTTPRequest) 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 la RFC3986 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
| Spécification | État | Commentaires |
|---|---|---|
| ECMAScript (ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Standard évolutif | |
| ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Standard | |
| ECMAScript 5.1 (ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Standard | |
| ECMAScript 3rd Edition (ECMA-262) | Standard | Définition initiale. |
Compatibilité des navigateurs
| Ordinateur | Mobile | Serveur | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
encodeURI | Chrome Support complet 1 | Edge Support complet 12 | Firefox Support complet 1 | IE Support complet 5.5 | Opera Support complet 7 | Safari Support complet 1.1 | WebView Android Support complet 1 | Chrome Android Support complet 18 | Firefox Android Support complet 4 | Opera Android Support complet 10.1 | Safari iOS Support complet 1 | Samsung Internet Android Support complet 1.0 | nodejs Support complet 0.1.100 |
Légende
- Support complet
- Support complet