Content-Length: 269360 | pFad | http://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

encodeURI() - JavaScript | MDN

Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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 fonction encodeURI() encode un URI en remplaçant chaque occurrence de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant l'encodage UTF-8 du caractère (il n'y aura quatre séquences d'échappement que pour les caractères composés de deux codets suppléants). Par rapport à encodeURIComponent(), cette fonction encode moins de caractères, préservant ceux qui font partie de la syntaxe de l'URI.

Exemple interactif

const uri = "https://mozilla.org/?x=шеллы";
const encoded = encodeURI(uri);
console.log(encoded);
// Résultat attendu : "https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"

try {
  console.log(decodeURI(encoded));
  // Résultat attendu : "https://mozilla.org/?x=шеллы"
} catch (e) {
  // Capture une URI mal formée
  console.error(e);
}

Syntaxe

js
encodeURI(uri)

Paramètres

uri

Une chaîne de caractères à encoder en tant qu'URI.

Valeur de retour

Une nouvelle chaîne de caractères représentant la chaîne fournie encodée en tant qu'URI.

Exceptions

URIError

Levée si uri contient un codet suppléant isolé.

Description

encodeURI() est une propriété fonction de l'objet global.

La fonction encodeURI() échappe les caractères par unités de code UTF-8, chaque octet étant encodé au format %XX, complété à gauche par 0 si nécessaire. Comme les codets suppléants isolés en UTF-16 ne codent aucun caractère Unicode valide, ils provoquent une levée de URIError par encodeURI().

encodeURI() échappe tous les caractères sauf :

A—Z a—z 0—9 - _ . ! ~ * ' ( )

; / ? : @ & = + $ , #

Les caractères de la seconde ligne sont ceux qui peuvent faire partie de la syntaxe d'un URI, et ne sont échappés que par encodeURIComponent(). encodeURI() et encodeURIComponent() n'encodent pas les caractères -.!~*'(), appelés « marques non réservées », qui n'ont pas de rôle réservé mais sont autorisés dans un URI « tels quels ». (Voir RFC 2396)

La fonction encodeURI() n'encode pas les caractères qui ont une signification spéciale (caractères réservés) pour un URI. L'exemple suivant montre toutes les parties qu'un URI peut contenir. Notez comment certains caractères servent à signifier une signification particulière :

url
http://preudo:motdepasse@www.exemple.com:80/chemin/du/fichier.php?toto=316&tata=ceci+est+un+espace#ancre

encodeURI, comme son nom l'indique, sert à encoder une URL dans son ensemble, en supposant qu'elle est déjà bien formée. Si vous souhaitez assembler dynamiquement des valeurs de chaîne dans une URL, il est préférable d'utiliser encodeURIComponent() sur chaque segment dynamique, afin d'éviter la présence de caractères de syntaxe d'URL à des endroits non souhaités.

js
const name = "Thomas & Jerry";

// This is bad:
const link = encodeURI(`https://exemple.com/?choice=${name}`); // "https://exemple.com/?choice=Thomas%20&%20Jerry"
console.log([...new URL(link).searchParams]); // [['choice', 'Thomas '], [" Jerry", '']

// Instead:
const link = encodeURI(
  `https://exemple.com/?choice=${encodeURIComponent(name)}`,
);
// "https://exemple.com/?choice=Thomas%2520&%2520Jerry"
console.log([...new URL(link).searchParams]); // [['choice', "Thomas%20&%20Jerry"]]

Exemples

encodeURI() contre encodeURIComponent()

encodeURI() diffère de encodeURIComponent() comme suit :

js
const set1 = ";,/?:@&=+$#"; // Caractères réservés
const set2 = "-_.!~*'()"; // Caractères non-réservés
const 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)

Encodage d'un codet suppléant isolé

Une exception URIError sera levée si on tente d'encoder un codet suppléant qui ne fait pas partie d'une paire haut-bas. Par exemple :

js
// 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"));

Vous pouvez utiliser String.prototype.toWellFormed(), qui remplace les codets suppléants isolés par le caractère de remplacement Unicode (U+FFFD), pour éviter cette erreur. Vous pouvez aussi utiliser String.prototype.isWellFormed() pour vérifier si une chaîne de caractères contient des codets suppléants isolés avant de la passer à encodeURI().

Encodage pour RFC3986

La RFC 3986 plus récente rend les crochets réservés (pour IPv6) et donc non encodés lors de la formation de quelque chose qui pourrait faire partie d'une URL (comme un hôte). Elle réserve aussi !, ', (, ), et *, même si ces caractères n'ont pas d'usage de délimitation d'URI formalisé. La fonction suivante encode une chaîne de caractères au format d'URL conforme à la RFC3986.

js
function encodeRFC3986URI(str) {
  return encodeURI(str)
    .replace(/%5B/g, "[")
    .replace(/%5D/g, "]")
    .replace(
      /[!'()*]/g,
      (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,
    );
}

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-encodeuri-uri

Compatibilité des navigateurs

Voir aussi









ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy