Funzione di decodifica URL JavaScript


Risposte:


219

1
grazie ragazzi! sembra la risposta giusta, ma Gumbo risposto questa prima .. Mi sento come lui merita il credito
a.

16
Questa è una risposta incompleta. Vedi l'implementazione di urlDecode () di seguito da @anshuman.
Steven Francolla,

3
Bello ma non ha rimosso i segni "+". La risposta di @ anshuman ha funzionato meglio per me
MusikAnimal

2
Non funziona con spazi rappresentati con ++++
mmm

237

Ecco una funzione completa (presa da PHPJS ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

34
+1: questo è il vero codice urld, gestisce il caso in cui lo spazio viene codificato come +, grazie mille
Máthé Endre-Botond

1
Questo è quello che dovevo usare quando i dati erano codificati con la funzione urlencode () di PHP.
Scott Keck-Warren,

1
Se non sbaglio, questa è la decodifica + come% 20, non come spazio - non è proprio quello che volevi qui, vero? Vorresti lo spazio, non un'altra versione di un personaggio codificato ... no?
Chris Moschini,

8
@ChrisMoschini: No, questo è corretto perché la sostituzione avviene prima della chiamata di decodifica.
lfaraone,

1
Grazie mille!! Questo è un modo perfetto per gestire le stringhe in jquery che sono state precedentemente urlencodificate con php, proprio quello di cui avevo bisogno !!
Dante Cullari,

9

Usa questo

unescape(str);

Non sono un grande programmatore di JS, ho provato tutto e ha funzionato alla grande!


2
Risposta interessante, ma sembra obsoleta a decodeURIComponent()causa del supporto scarso dei caratteri non ASCII.
Brad Koch,

9
decodeURIComponent(mystring);

puoi ottenere i parametri passati usando questo bit di codice:

//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;
}

O questo one-liner per ottenere i parametri:

location.search.split("your_parameter=")[1]

2
Dovresti usare window.location.searchinvece.
aloisdg si trasferisce su codidact.com il

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

Grazie, ha funzionato per me. decodeURIComponent non ha funzionato per me (sequenza URI non valida).
Smile4ever,

2

Se sei responsabile della codifica dei dati in PHP utilizzando urlencode, il rawurlencode di PHP funziona con il componente decodificaURIC di JavaScript senza dover sostituire il carattere +.


0

Ecco cosa ho usato:

In JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url);

In PHP:

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

$decoded_url = url_decode($encoded_url);

Puoi anche provarlo online qui: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()va bene, ma non vuoi mai usarlo encodeURIComponent()direttamente. Questo non riesce a sfuggire caratteri riservati come *, !, ', (, e ). Dai un'occhiata a RFC3986 , dove è definito, per maggiori informazioni a riguardo. La documentazione di Mozilla Developer Network fornisce sia una buona spiegazione che una soluzione. Spiegazione...

Per essere più rigorosi nell'aderire a RFC 3986 (che riserva!, ', (,) E *), anche se questi caratteri non hanno usi di delimitazione URI formalizzati, è possibile utilizzare in sicurezza:

Soluzione...

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

Se non sei sicuro, dai un'occhiata a una buona demo funzionante su JSBin.com . Confronta questo con una demo funzionante su JSBin.com usando encodeURIComponent()direttamente .

Buoni risultati del codice:

thing%2athing%20thing%21

Risultati con codici errati da encodeURIComponent():

thing*thing%20thing!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.