Obter o parâmetro do URL com escape

Eu estou procurando um plugin jQuery que pode obter parâmetros de URL e suporte a esta seqüência de pesquisa sem a saída do erro de JavaScript: “seqüência de URI malformada”. Se não houver um plugin jQuery que suporte isso, preciso saber como modificá-lo para suportar isso.

?search=%E6%F8%E5 

O valor do parâmetro de URL, quando decodificado, deve ser:

 æøå 

(os caracteres são noruegueses).

Eu não tenho access ao servidor, então não posso modificar nada nele.

     function getURLParameter(name) { return decodeURI( (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] ); } 

    Abaixo está o que eu criei a partir dos comentários aqui, bem como correção de bugs não mencionados (como, por exemplo, retornando null, e não ‘null’):

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

    O que você realmente quer é o plugin jQuery URL Parser . Com este plug-in, obter o valor de um parâmetro de URL específico (para o URL atual) é semelhante ao seguinte:

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

    Se você quiser um object com nomes de parâmetros como chaves e valores de parâmetros como valores, basta chamar param() sem um argumento, como este:

     $.url().param(); 

    Esta biblioteca também funciona com outras URLs, não apenas a atual:

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

    Como essa é uma biblioteca de análise de URL inteira, você também pode obter outras informações da URL, como a porta especificada, o caminho, o 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' 

    Também tem outros resources, confira sua homepage para mais documentos e exemplos.

    Em vez de escrever seu próprio analisador de URI para esse propósito específico que funciona na maioria dos casos, use um analisador de URI real. Dependendo da resposta, o código de outras respostas pode retornar 'null' vez de null , não funciona com parâmetros vazios ( ?foo=&bar=x ), não pode analisar e retornar todos os parâmetros de uma só vez, repete o trabalho se consultar repetidamente a URL para parâmetros etc.

    Use um analisador URI real, não invente o seu próprio.

    Para aqueles avessos ao jQuery, há uma versão do plugin que é puro JS .

    Se você não sabe quais serão os parâmetros de URL e deseja obter um object com as chaves e valores que estão nos parâmetros, você pode usar isto:

     function getParameters() { var searchString = window.location.search.substring(1), params = searchString.split("&"), hash = {}; if (searchString == "") return {}; for (var i = 0; i < params.length; i++) { var val = params[i].split("="); hash[unescape(val[0])] = unescape(val[1]); } return hash; } 

    Chamar getParameters () com um URL como /posts?date=9/10/11&author=nilbus retornaria:

     { date: '9/10/11', author: 'nilbus' } 

    Eu não vou include o código aqui, já que ele está ainda mais longe da questão, mas o weareon.net postou uma biblioteca que permite a manipulação dos parâmetros no URL também:

    Você pode usar a propriedade location.search nativa do navegador:

     function getParameter(paramName) { var searchString = window.location.search.substring(1), i, val, params = searchString.split("&"); for (i=0;i 

    Mas existem alguns plugins do jQuery que podem ajudá-lo:

    • object de consulta
    • getURLParam

    Baseado na resposta do 999 :

     function getURLParameter(name) { return decodeURIComponent( (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1] ); } 

    Alterar:

    • decodeURI() é substituído por decodeURIComponent()
    • [?|&] é adicionado no início do regexp

    É necessário adicionar o parâmetro i para torná-lo insensível a maiúsculas e minúsculas:

      function getURLParameter(name) { return decodeURIComponent( (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1] ); } 
     $.urlParam = function(name){ var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); return (results !== null) ? results[1] : 0; } $.urlParam("key"); 

    Por exemplo, uma function que retorna o valor de qualquer variável de parâmetro.

     function GetURLParameter(sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } }​ 

    E é assim que você pode usar essa function assumindo que a URL é,

    "http://example.com/?technology=jquery&blog=jquerybyexample".

     var tech = GetURLParameter('technology'); var blog = GetURLParameter('blog'); 

    Portanto, na variável de código acima, "tech" terá "jQuery" como valor e a variável "blog" será "jquerybyexample".

    Você não deve usar o jQuery para algo assim!
    A maneira moderna é usar pequenos módulos reutilizáveis ​​através de um gerenciador de pacotes como o Bower.

    Eu criei um pequeno módulo que pode analisar a seqüência de consulta em um object. Use assim:

     // parse the query string into an object and get the property queryString.parse(unescape(location.search)).search; //=> æøå 

    Depois de ler todas as respostas acabei com esta versão com + uma segunda function para usar parâmetros como sinalizadores

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

    Há muito código de bugs aqui e as soluções de regex são muito lentas. Eu encontrei uma solução que funciona até 20x mais rápido que a contraparte regex e é elegantemente simples:

      /* * @param string parameter to return the value of. * @return string value of chosen parameter, if found. */ function get_param(return_this) { return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars. var url = window.location.href; // Get the URL. var parameters = url.substring(url.indexOf("?") + 1).split("&"); // Split by "param=value". var params = []; // Array to store individual values. for(var i = 0; i < parameters.length; i++) if(parameters[i].search(return_this + "=") != -1) return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+"); return "Parameter not found"; } console.log(get_param("parameterName")); 

    O Regex não é a solução definitiva e definitiva, pois esse tipo de problema pode manipular uma quantidade muito mais eficiente. Fonte de código .

      

    getURLParameter(id) ou getURLParameter(Id) Funciona da mesma forma getURLParameter(Id)

    Snippet de código jQuery para obter as variables ​​dinâmicas armazenadas na url como parâmetros e armazená-las como variables ​​JavaScript prontas para uso com seus scripts:

     $.urlParam = function(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); if (results==null){ return null; } else{ return results[1] || 0; } } example.com?param1=name&param2=&id=6 $.urlParam('param1'); // name $.urlParam('id'); // 6 $.urlParam('param2'); // null //example params with spaces http://www.jquery4u.com?city=Gold Coast console.log($.urlParam('city')); //output: Gold%20Coast console.log(decodeURIComponent($.urlParam('city'))); //output: Gold Coast 
     function getURLParameters(paramName) { var sURL = window.document.URL.toString(); if (sURL.indexOf("?") > 0) { var arrParams = sURL.split("?"); var arrURLParams = arrParams[1].split("&"); var arrParamNames = new Array(arrURLParams.length); var arrParamValues = new Array(arrURLParams.length); var i = 0; for (i=0;i 

    Eu criei uma function simples para obter o parâmetro de URL em JavaScript de um URL como este:

     .....58e/web/viewer.html?page=*17*&getinfo=33 function buildLinkb(param) { var val = document.URL; var url = val.substr(val.indexOf(param)) var n=parseInt(url.replace(param+"=","")); alert(n+1); } buildLinkb("page"); 

    SAÍDA: 18

    Apenas no caso de vocês terem o url como localhost / index.xsp? A = 1 # alguma coisa e você precisa obter o param não o hash.

     var vars = [], hash, anchor; var q = document.URL.split('?')[1]; if(q != undefined){ q = q.split('&'); for(var i = 0; i < q.length; i++){ hash = q[i].split('='); anchor = hash[1].split('#'); vars.push(anchor[0]); vars[hash[0]] = anchor[0]; } } 

    Pequena modificação na resposta de @pauloppenheim, já que ele não manipulará corretamente nomes de parâmetros que podem ser parte de outros nomes de parâmetros.

    Por exemplo: Se você tiver os parâmetros “appenv” e “env”, redeaing o valor para “env” pode pegar o valor “appenv”.

    Consertar:

     var urlParamVal = function (name) { var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search); return result ? decodeURIComponent(result[2]) : ""; }; 

    Isso pode ajudar.