Função de decodificação de URL JavaScript

157

Qual é o melhor utilitário de decodificação de URL JavaScript? A codificação também seria legal e trabalhar bem com o jQuery é um bônus adicional.

às.
fonte
36
Você checou encodeURIComponente decodeURIComponent?
Gumbo #
isso é realmente a mesma coisa?
às.
@ Gumbo: o mesmo que codificação e decodificação de URL - blooberry.com/indexdot/html/topics/urlencoding.htm
em.

Respostas:

219

Eu usei encodeURIComponent () e decodeURIComponent () também.

Geoff
fonte
1
obrigado rapazes! Parece que a resposta certa, mas Gumbo respondeu a essa primeira .. Eu sinto que ele merece o crédito
no.
16
Esta é uma resposta incompleta. Veja a implementação urlDecode () abaixo por @anshuman.
Steven Francolla
3
Bom, mas não removeu os sinais '+'. @ resposta de Anshuman funcionou melhor para mim
MusikAnimal
2
Não funciona com espaços representados com ++++
mmm
237

Aqui está uma função completa (retirada do PHPJS ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
anshuman
fonte
34
+1: esta é a verdadeira urldecode, lida com o caso do espaço a ser codificado como +, muito obrigado
Máthé Endre-Botond
1
Era isso que eu precisava usar quando os dados foram codificados com a função urlencode () do PHP.
Scott Keck-Warren
1
Se não me engano, isso é decodificar + como% 20, não como espaço - não é exatamente o que você queria aqui, é? Você gostaria do espaço, não outra versão de um personagem codificado ... não?
Chris Moschini 01/03
8
@ ChrisMoschini: Não, isso está correto porque a substituição ocorre antes da chamada de decodificação.
lfaraone
1
Muito obrigado!! Esta é uma maneira perfeita de lidar com strings no jquery que foram previamente codificadas com php, exatamente o que eu precisava!
Dante Cullari
9

Usa isto

unescape(str);

Eu não sou um grande programador de JS, tentei de tudo, e isso funcionou demais!

nithinreddy
fonte
2
Arrefecer resposta, mas parece que é obsoleto em favor dos decodeURIComponent()devido à má suporte de caracteres não-ASCII.
Brad Koch
9
decodeURIComponent(mystring);

você pode obter parâmetros passados ​​usando este bit de código:

//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 este one-liner para obter os parâmetros:

location.search.split("your_parameter=")[1]
Etienne Dupuis
fonte
2
Você deve usar em seu window.location.searchlugar.
aloisdg movendo-se para codidact.com 15/11
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
fonte
Obrigado, isso funcionou para mim. decodeURIComponent não funcionou para mim (sequência de URI malformada).
precisa saber é o seguinte
2

Se você é responsável por codificar os dados no PHP usando o urlencode, o rawurlencode do PHP funciona com o decodeURIComponent do JavaScript, sem a necessidade de substituir o caractere +.

Brent Self
fonte
0

Aqui está o que eu usei:

Em JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url);

Em PHP:

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

$decoded_url = url_decode($encoded_url);

Você também pode experimentá-lo online aqui: http://www.mynewsfeed.x10.mx/articles/index.php?id=17

user3572058
fonte
0

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

methodpool.io
fonte
0

decodeURIComponent()está bem, mas você nunca deseja ot encodeURIComponent()diretamente. Esta falha para escapar caracteres reservados, como *, !, ', (, e ). Confira RFC3986 , onde isso é definido, para mais informações sobre isso. A documentação da Mozilla Developer Network fornece uma boa explicação e uma solução. Explicação...

Para ser mais rigoroso no cumprimento da RFC 3986 (que reserva!, ', (,) E *), mesmo que esses caracteres não tenham usos formalizados para delimitar URI, o seguinte pode ser usado com segurança:

Solução...

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

Caso não tenha certeza, confira uma boa demonstração de trabalho em JSBin.com . Compare isso com uma demonstração ruim e de trabalho no JSBin.com usando encodeURIComponent()diretamente .

Bons resultados de código:

thing%2athing%20thing%21

Resultados de código incorretos de encodeURIComponent():

thing*thing%20thing!

HoldOffHunger
fonte