Función de decodificación de URL de JavaScript


157

¿Cuál es la mejor utilidad de decodificación de URL de JavaScript? Codificar también sería bueno y trabajar bien con jQuery es una ventaja adicional.


36
¿Lo comprobaste encodeURIComponenty decodeURIComponent?
Gumbo

¿Es eso realmente lo mismo?
a las.

@Gumbo: lo mismo que la codificación de URL y la decodificación de URL - blooberry.com/indexdot/html/topics/urlencoding.htm
at.

Respuestas:


219

1
¡gracias chicos! se parece a la respuesta correcta, pero Gumbo respondieron a esta primera .. Siento que merece el crédito
a.

16
Esta es una respuesta incompleta. Vea la implementación de urlDecode () a continuación por @anshuman.
Steven Francolla

3
Agradable, pero no eliminó los signos '+'. La respuesta de @ anshuman funcionó mejor para mí
MusikAnimal

2
No funciona con espacios representados con ++++
mmm

237

Aquí hay una función completa (tomada de PHPJS ):

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

34
+1: este es el verdadero código de url, maneja el caso del espacio codificado como +, muchas gracias
Máthé Endre-Botond

1
Esto es lo que necesitaba usar cuando los datos se codificaron con la función urlencode () de PHP.
Scott Keck-Warren

1
Si no me equivoco, esto es decodificar + como% 20, no como espacio, eso no es realmente lo que querías aquí, ¿verdad? Querrías el espacio, no otra versión de un personaje codificado ... ¿no?
Chris Moschini

8
@ChrisMoschini: No, esto es correcto porque el reemplazo ocurre antes de la llamada de decodificación.
lfaraone

1
¡¡Muchas gracias!! Esta es una manera perfecta de manejar cadenas en jquery que han sido previamente codificadas con php, ¡justo lo que necesitaba!
Dante Cullari

9

Utilizar este

unescape(str);

No soy un gran programador de JS, lo intenté todo, ¡y funcionó de maravilla!


2
Respuesta genial, pero parece que está obsoleta a favor de decodeURIComponent()debido al pobre soporte de caracteres no ASCII.
Brad Koch

9
decodeURIComponent(mystring);

Puede obtener parámetros pasados ​​utilizando 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;
}

O esta línea para obtener los parámetros:

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

2
Deberías usar window.location.searchen su lugar.
aloisdg se muda a codidact.com el

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

Gracias, esto funcionó para mí. decodeURIComponent no funcionó para mí (secuencia de URI malformada).
Smile4ever

2

Si usted es responsable de codificar los datos en PHP utilizando urlencode, el rawurlencode de PHP funciona con decodeURIComponent de JavaScript sin necesidad de reemplazar el carácter +.


0

Esto es lo que usé:

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

También puede probarlo en línea aquí: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()está bien, pero nunca quieres usarlo encodeURIComponent()directamente. Esto no puede escapar caracteres reservados como *, !, ', (, y ). Consulte RFC3986 , donde se define, para obtener más información al respecto. La documentación de Mozilla Developer Network brinda una buena explicación y una solución. Explicación...

Para ser más estricto al adherirse a RFC 3986 (que se reserva!, ', (,) Y *), a pesar de que estos caracteres no tienen usos formales de delimitación de URI, se puede usar con seguridad lo siguiente:

Solución...

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

En caso de que no esté seguro, consulte una buena demostración que funcione en JSBin.com . Compare esto con una demostración que funciona mal en JSBin.com usando encodeURIComponent()directamente .

Buenos resultados del código:

thing%2athing%20thing%21

Resultados de código incorrecto de encodeURIComponent():

thing*thing%20thing!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.