Ottieni il parametro URL con escape

Sto cercando un plugin jQuery in grado di ottenere parametri URL e supportare questa stringa di ricerca senza emettere l’errore JavaScript: “sequenza URI non valida”. Se non c’è un plugin jQuery che supporti questo, ho bisogno di sapere come modificarlo per supportare questo.

?search=%E6%F8%E5 

Il valore del parametro URL, quando decodificato, dovrebbe essere:

 æøå 

(i personaggi sono norvegesi).

Non ho accesso al server, quindi non posso modificare nulla su di esso.

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

    Di seguito è riportato ciò che ho creato dai commenti qui, oltre a correggere bug non menzionati (come restituire effettivamente null e non “null”):

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

    Quello che vuoi veramente è il plug-in Parser URL jQuery . Con questo plugin, ottenere il valore di un parametro URL specifico (per l’URL corrente) è simile a questo:

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

    Se vuoi un object con i nomi dei parametri come chiavi e i valori dei parametri come valori, dovresti chiamare param() senza un argomento, come questo:

     $.url().param(); 

    Questa libreria funziona anche con altri URL, non solo quello attuale:

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

    Poiché si tratta di un’intera libreria di analisi degli URL, puoi anche ottenere altre informazioni dall’URL, come la porta specificata, o il percorso, il protocollo ecc.

     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' 

    Ha anche altre caratteristiche, controlla la sua homepage per ulteriori documenti ed esempi.

    Invece di scrivere il proprio parser URI per questo scopo specifico che funziona nella maggior parte dei casi, utilizzare un parser URI effettivo. A seconda della risposta, il codice di altre risposte può restituire 'null' invece di null , non funziona con parametri vuoti ( ?foo=&bar=x ), non può analizzare e restituire tutti i parametri in una volta, ripete il lavoro se interrogare ripetutamente l’URL per i parametri, ecc.

    Utilizzare un parser URI effettivo, non inventare il proprio.

    Per quelli avversi a jQuery, c’è una versione del plugin che è puro JS .

    Se non sai quali saranno i parametri URL e vuoi ottenere un object con le chiavi e i valori presenti nei parametri, puoi utilizzare questo:

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

    Chiamando getParameters () con un url come /posts?date=9/10/11&author=nilbus restituirebbe:

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

    Non includerò il codice qui poiché è ancora più lontano dalla domanda, ma weareon.net ha pubblicato una libreria che consente la manipolazione dei parametri anche nell'URL:

    Puoi utilizzare la proprietà location.search nativa del browser:

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

    Ma ci sono alcuni plugin jQuery che possono aiutarti:

    • query object
    • getURLParam

    Basato sulla risposta del 999 :

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

    I cambiamenti:

    • decodeURI() viene sostituito con decodeURIComponent()
    • [?|&] è aggiunto all’inizio della regexp

    È necessario aggiungere il parametro i per renderlo non sensibile al maiuscolo / minuscolo:

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

    Ad esempio, una funzione che restituisce il valore di qualsiasi variabile di parametri.

     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 questo è come puoi usare questa funzione presumendo che l'URL sia,

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

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

    Quindi nella variabile del codice sopra "tech" avrà "jQuery" come valore e la variabile "blog" sarà "jquerybyexample".

    Non dovresti usare jQuery per qualcosa di simile!
    Il modo moderno è usare piccoli moduli riutilizzabili attraverso un gestore di pacchetti come Bower.

    Ho creato un piccolo modulo in grado di analizzare la stringa di query in un object. Usalo in questo modo:

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

    Dopo aver letto tutte le risposte ho finito con questa versione con + una seconda funzione per usare i parametri come flag

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

    C’è un sacco di codice buggy qui e le soluzioni regex sono molto lente. Ho trovato una soluzione che funziona fino a 20 volte più velocemente rispetto alla controparte regex ed è elegantemente semplice:

      /* * @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")); 

    Regex non è la soluzione completa e completa, per questo tipo di problema la semplice manipolazione delle stringhe può funzionare in modo molto più efficiente. Codice sorgente

      

    getURLParameter(id) o getURLParameter(Id) Funziona allo stesso modo getURLParameter(Id)

    jQuery snippet di codice per ottenere le variabili dinamiche memorizzate nell’URL come parametri e memorizzarle come variabili JavaScript pronte per l’uso con gli script:

     $.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 

    Ho creato una semplice funzione per ottenere il parametro URL in JavaScript da un URL come questo:

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

    PRODUZIONE: 18

    Nel caso in cui voi avete l’url come localhost / index.xsp? A = 1 # qualcosa e avete bisogno di ottenere il parametro non l’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]; } } 

    Leggera modifica alla risposta di @pauloppenheim, poiché non gestirà correttamente i nomi dei parametri che possono far parte di altri nomi di parametri.

    Ad es .: se disponi di parametri “appenv” e “env”, la modifica del valore di “env” può acquisire il valore “appenv”.

    Difficoltà:

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

    Questo può aiutare.