2010-11-27 13 views
147

¿Cuál es la mejor utilidad de decodificación de URL de JavaScript? La codificación también sería agradable y funcionar bien con jQuery es una ventaja adicional.Función de descodificación de URL de JavaScript

+35

Did usted verifica 'codificado eURIComponent' y 'decodeURIComponent'? – Gumbo

+0

es realmente lo mismo? –

+2

@at: ¿Lo mismo que qué? – Gumbo

Respuesta

209
+1

gracias chicos! parece la respuesta correcta, pero Gumbo respondió esto primero. Siento que se merece el crédito –

+15

Esta es una respuesta incompleta. Consulte la implementación de urlDecode() a continuación por @anshuman. –

+2

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

224

Aquí es una función completa (tomado de PHPJS):

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

+1: este es el verdadero urldecode, maneja el caso del espacio codificado como +, muchas gracias – SinistraD

+1

Esto es lo que necesario utilizar cuando los datos se codificaron con la función urlencode() de PHP. –

+0

Super útil para mí y tardé un nanosegundo en implementarlo. ¡Gracias! –

9
decodeURIComponent(mystring); 

se puede obtener parámetros pasados ​​a través de este trozo 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 esto de una sola línea a obtener los parámetros:

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

Debería usar 'window.location.search' en su lugar. – aloisdg

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

Gracias, esto funcionó para mí. decodeURIComponent no funcionó para mí (secuencia URI mal formada). – Smile4ever

5

Utilice esta

unescape(str); 

No soy un gran programador JS, intentó todo, y esto funcionó increíble!

+1

Respuesta interesante, pero parece que está [obsoleta] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FFunctions#escape_and_unescape_functions (Obsoleted_above_JavaScript_1.5)) a favor de 'decodeURIComponent()' debido a la poca compatibilidad de los caracteres que no son ASCII. –

1

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

1

Esto es lo que he usado:

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 probar en línea aquí: http://www.mynewsfeed.x10.mx/articles/index.php?id=17