2008-11-15 5 views
4

Je veux décoder une chaîne qui a été codée en utilisant la méthode java.net.URLEncoder.encode().Décodage d'URL en Javascript

J'ai essayé d'utiliser la fonction unescape() en javascript, mais un problème se produit pour des espaces vides, car java.net.URLEncoder.encode() convertit un espace vide à « + » mais unescape() ne convertit pas « + » pour un espace vide.

Répondre

2

Essayez decodeURI("") ou decodeURIComponent("") -)

+0

Tout simplement parce qu'il faut une chaîne comme argument -) – roenving

2

en utilisant la fonction évasion/unescape de JavaScript est presque toujours la mauvaise chose, il est incompatible avec l'URL codantes ou tout autre codage standard sur le web. Les caractères non-ASCII sont traités de manière inattendue ainsi que les espaces, et les anciens navigateurs n'ont pas nécessairement le même comportement.

Comme mentionné par Roenving, la méthode que vous voulez est decodeURIComponent(). C'est un ajout plus récent que vous ne trouverez pas sur IE 5.0, donc si vous avez besoin de supporter ce navigateur (espérons que non, de nos jours!), Vous devrez implémenter la fonction vous-même. Et pour les caractères non-ASCII, cela signifie que vous devez implémenter un encodeur UTF-8. Le code est disponible si vous en avez besoin.

1

decodeURI [Composant] ne gère pas + comme espace non plus (au moins sur FF3, où j'ai testé).

solution simple:

alert(decodeURIComponent('http://foo.com/bar+gah.php?r=%22a+b%22&d=o%e2%8c%98o'.replace(/\+/g, '%20'))) 

En effet, unescape selfs sur cette URL: il ne connaît que UTF-16 caractères comme% u2318 qui ne sont pas standard (voir Percent-encoding).

0

Essayez

var decoded = decodeURIComponent(encoded.replace(/\+/g," ")); 
Questions connexes