Fonction de décodage d'URL JavaScript

157

Quel est le meilleur utilitaire de décodage d'URL JavaScript? L'encodage serait bien aussi et travailler bien avec jQuery est un bonus supplémentaire.

à.
la source
36
Avez-vous vérifié encodeURIComponentet decodeURIComponent?
Gumbo
est-ce vraiment la même chose?
à.
@Gumbo: la même chose que l'encodage d'URL et le décodage d'URL - blooberry.com/indexdot/html/topics/urlencoding.htm
à.

Réponses:

219

J'ai également utilisé encodeURIComponent () et decodeURIComponent () .

Geoff
la source
1
Merci les gars! ressemble à la bonne réponse, mais Gumbo a répondu à cela en premier .. J'ai l'impression qu'il mérite le crédit
à.
16
Ceci est une réponse incomplète. Voir l'implémentation urlDecode () ci-dessous par @anshuman.
Steven Francolla
3
Bien mais il n'a pas supprimé les signes «+». La réponse de @ anshuman a fonctionné le mieux pour moi
MusikAnimal
2
Ne fonctionne pas avec les espaces représentés par ++++
mmm
237

Voici une fonction complète (tirée de PHPJS ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
anshumain
la source
34
+1: c'est le vrai urldecode, gère le cas où l'espace est encodé comme +, merci beaucoup
Máthé Endre-Botond
1
C'est ce que j'avais besoin d'utiliser lorsque les données étaient encodées avec la fonction urlencode () de PHP.
Scott Keck-Warren
1
Si je ne me trompe pas, c'est un décodage + en% 20, pas en espace - ce n'est pas vraiment ce que vous vouliez ici, n'est-ce pas? Vous voudriez de l'espace, pas une autre version d'un caractère encodé ... non?
Chris Moschini
8
@ChrisMoschini: Non, c'est correct car le remplacement se produit avant l'appel de décodage.
lfaraone
1
Merci beaucoup!! C'est un moyen idéal pour gérer les chaînes dans jquery qui ont été précédemment encodées en url avec php, exactement ce dont j'avais besoin !!
Dante Cullari
9

Utilisez ceci

unescape(str);

Je ne suis pas un grand programmeur JS, j'ai tout essayé et cela a très bien fonctionné!

nithinreddy
la source
2
Réponse sympa, mais il semble qu'elle soit obsolète en decodeURIComponent()raison de la mauvaise prise en charge des caractères non ASCII.
Brad Koch
9
decodeURIComponent(mystring);

vous pouvez obtenir les paramètres passés en utilisant ce bit de code:

//parse URL to get values: var i = getUrlVars()["i"];
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

Ou ce one-liner pour obtenir les paramètres:

location.search.split("your_parameter=")[1]
Etienne Dupuis
la source
2
Vous devriez utiliser à la window.location.searchplace.
aloisdg passe à codidact.com
3
//How decodeURIComponent Works

function proURIDecoder(val)
{
  val=val.replace(/\+/g, '%20');
  var str=val.split("%");
  var cval=str[0];
  for (var i=1;i<str.length;i++)
  {
    cval+=String.fromCharCode(parseInt(str[i].substring(0,2),16))+str[i].substring(2);
  }

  return cval;
}

document.write(proURIDecoder(window.location.href));
Irfan M
la source
Merci, cela a fonctionné pour moi. decodeURIComponent n'a pas fonctionné pour moi (séquence URI malformée).
Smile4ever
2

Si vous êtes responsable de l'encodage des données en PHP en utilisant urlencode, le rawurlencode de PHP fonctionne avec le decodeURIComponent de JavaScript sans avoir besoin de remplacer le caractère +.

Brent Self
la source
0

Voici ce que j'ai utilisé:

En JavaScript:

var url = "http://www.mynewsfeed.com/articles/index.php?id=17";
var encoded_url = encodeURIComponent(url);

var decoded_url = decodeURIComponent(encoded_url);

En PHP:

$url = "http://www.mynewsfeed.com/articles/index.php?id=17";
$encoded_url = url_encode(url);

$decoded_url = url_decode($encoded_url);

Vous pouvez également l'essayer en ligne ici: http://www.mynewsfeed.x10.mx/articles/index.php?id=17

user3572058
la source
0

var uri = "my test.asp?name=ståle&car=saab";
console.log(encodeURI(uri));

methodpool.io
la source
0

decodeURIComponent()c'est bien, mais vous ne voulez jamais utiliser encodeURIComponent()directement. Cela ne s'échapper les caractères réservés comme *, !, ', (et ). Consultez RFC3986 , où cela est défini, pour plus d'informations à ce sujet. La documentation du Mozilla Developer Network donne à la fois une bonne explication et une solution. Explication...

Pour être plus strict dans le respect de la RFC 3986 (qui réserve!, ', (,) Et *), même si ces caractères n'ont pas d'utilisation formalisée de délimitation d'URI, les éléments suivants peuvent être utilisés en toute sécurité:

Solution...

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

Au cas où vous n'êtes pas sûr, consultez une bonne démo fonctionnelle sur JSBin.com . Comparez cela avec une mauvaise démonstration fonctionnelle sur JSBin.com en utilisant encodeURIComponent()directement .

Bons résultats de code:

thing%2athing%20thing%21

Un code incorrect résulte de encodeURIComponent():

thing*thing%20thing!

HoldOffHunger
la source