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

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 = "#";           // Croisillon
var set4 = "ABC abc 123"; // Caractères alphanumériques et espace

console.log(encodeURI(set1)); // ;,/?:@&=+$
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // #
console.log(encodeURI(set4)); // ABC%20abc%20123 (l'espace est encodé en %20)

console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // #
console.log(encodeURIComponent(set4)); // 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 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 Latest Draft (ECMA-262)
La définition de 'encodeURI' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simpleChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : LorisG, SphinxKnight, teoli, Jeremie, Delapouite, matteodelabre
Dernière mise à jour par : LorisG,