Obtener parámetro de URL de escape

Resuelto Sindre Sorhus asked hace 15 años • 19 respuestas

Estoy buscando un complemento jQuery que pueda obtener parámetros de URL y admitir esta cadena de búsqueda sin generar el error de JavaScript: "secuencia de URI con formato incorrecto". Si no hay un complemento jQuery que admita esto, necesito saber cómo modificarlo para que lo admita.

?search=%E6%F8%E5

El valor del parámetro URL, cuando se decodifica, debe ser:

æøå

(los personajes son noruegos).

No tengo acceso al servidor, por lo que no puedo modificar nada en él.

Sindre Sorhus avatar Sep 10 '09 14:09 Sindre Sorhus
Aceptado
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}
James avatar Sep 10 '2009 08:09 James

A continuación se muestra lo que he creado a partir de los comentarios aquí, además de corregir errores no mencionados (como devolver nulo y no 'nulo'):

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
radicand avatar Jan 06 '2012 20:01 radicand

Lo que realmente quieres es el complemento jQuery URL Parser . Con este complemento, obtener el valor de un parámetro de URL específico (para la URL actual) se ve así:

$.url().param('foo');

Si quieres un objeto con nombres de parámetros como claves y valores de parámetros como valores, simplemente llamarías param()sin argumento, así:

$.url().param();

Esta biblioteca también funciona con otras URL, no solo con la actual:

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

Dado que se trata de una biblioteca de análisis de URL completa, también puede obtener otra información de la URL, como el puerto especificado, la ruta, el protocolo, etc.

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

También tiene otras características; consulte su página de inicio para obtener más documentos y ejemplos.

En lugar de escribir su propio analizador de URI para este propósito específico que funciona en la mayoría de los casos, use un analizador de URI real. Dependiendo de la respuesta, el código de otras respuestas puede regresar 'null'en lugar de null, no funciona con parámetros vacíos ( ?foo=&bar=x), no puede analizar y devolver todos los parámetros a la vez, repite el trabajo si consulta repetidamente la URL para obtener parámetros, etc.

Utilice un analizador de URI real, no invente el suyo propio.

Para aquellos reacios a jQuery, existe una versión del complemento que es JS puro .

Lucas avatar Jun 01 '2012 00:06 Lucas