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 »).
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
En prenant l'hypothèse que l'URI est un URI complet, les caractères réservés qui ont une signification spéciale ne sont pas encodés.
encodeURI
remplacera tous les caractères par leur séquence d'échappement UTF-8, à l'exception des caractères suivants :
Type | Comprend |
Caractères réservés | ; , / ? : @ & = + $ |
Caractères non échappés | caractères de l'alphabet latin, chiffres, - _ . ! ~ * ' ( ) |
Croisillon | # |
encodeURI
seule ne permet pas de former des requêtes HTTP GET et POST entières (comme le permet XMLHTTPRequest
) car "&", "+", et "=" ne sont pas encodés et sont traités comme des caractères spéciaux pour les requêtes GET et POST. encodeURIComponent
, en revanche, permet d'encoder ces caractères.
Une exception URIError
sera levée si l'élément à encoder est un seul demi-codet d'une paire de demi-codets (un élément d'une « surrogate pair ») :
// une paire de demi-codets : OK console.log(encodeURI('\uD800\uDFFF')); // un seul demi-codet (supérieur) : "URIError: malformed URI sequence" console.log(encodeURI('\uD800')); // un seul demi-codet (inférieur) : "URIError: malformed URI sequence" console.log(encodeURI('\uDFFF'));
Si on souhaite suivre la RFC 3986 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 3rd Edition (ECMA-262) | Standard | Définition initiale. |
ECMAScript 5.1 (ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) La définition de 'encodeURI' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) | (Oui) |