urlencode en Javascript

Mars 2013

Une URL ne peut contenir qu'un sous-ensemble très restreint de caractères alpha numériques. Il est par exemple impossible d'y mettre des caractères accentués ou des espaces.

En réalité, on peut y mettre des caractères spéciaux, mais ceux-ci doivent être encodés avec un encodage créé spécialement pour cette utilisation, que l'on appelle URL encoding ou Percent encoding, parce qu'il utilise le symbole pourcentage : % pour échapper les métacaractères.

Voici par un petit exemple avec une chaine de caractère "brute", et sa version encodée :

Natif       : Pas de caractères accentués dans l'URL !
URL encoded : Pas%20de%20caract%C3%A8res%20accentu%C3%A9s%20dans%20l'URL%20!

Tous les caractères spéciaux ont été remplacés par des marqueurs composés du signe % suivi d'une valeur en hexadécimal.

En Javascript, il existe une fonction native qui permet d'encoder une chaine de caractère pour l'utiliser dans une URL : encodeURIComponent (qui est l'équivalent de la fonction PHP urlencode) :

alert( encodeURIComponent("Pas de caractères accentués dans l'URL !") );

Différence entre encodeURI et encodeURIComponent

Il existe aussi une autre fonction qui permet d'encoder des URL en Javascript : encodeURI. Cette seconde fonction est une version "intelligente" de encodeURIComponent, qui n'encode que les parties de l'URL à encoder.

En effet, imaginons cette URL : http://www.google.fr/search?q=Pas de caractères accentués dans l'URL !, elle n'est pas conforme car la valeur du paramètre q doit être encodée correctement. Maintenant si on applique la fonction encodeURIComponent à cette URL, voici ce qu'on obtient :

http%3A%2F%2Fwww.google.fr%2Fsearch%3Fq%3DPas%20de%20caract%C3%A8res%20accentu%C3%A9s%20dans%20l'URL%20!

La page du jour est collage spécial avec excel, bonne lecture.

Ça n'est toujours pas bon, car seul le paramètre q doit être encodé, et pas toute l'URL. Pour faire les choses correctement, on doit normalement construire l'URL manuellement, par concaténation, en encodant chaque paramètre individuellement, comme ceci :

var url = "http://www.google.fr/search?q=" + encodeURIComponent("Pas de caractères accentués dans l'URL !");

On obtiens alors cette url :

http://www.google.fr/search?q=Pas%20de%20caract%C3%A8res%20accentu%C3%A9s%20dans%20l'URL%20!

L'autre solution, c'est d'utiliser la fonction encodeURI qui va produire le même résultat. Je vous déconseille de l'utiliser, car cette fonction ne peut pas savoir à votre place ou sont les paramètres ) encoder, elle le devine en se basant sur certains métacaractères comme le / , ? ou &.

Encore faim ? allez lire ça : texte "boules à neige" !

0 commentaire
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré