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.


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 () .


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'));
}

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é!


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]

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));

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 +.


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



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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.