wake-up-neo.com

Get escaped URL parameter

Ich bin auf der Suche nach einem jQuery-Plugin, das URL-Parameter abrufen und diese Suchzeichenfolge unterstützen kann, ohne den JavaScript-Fehler "Missformed URI Sequence" auszugeben. Wenn es kein jQuery-Plugin gibt, das dies unterstützt, muss ich wissen, wie es geändert werden kann, um dies zu unterstützen.

?search=%E6%F8%E5

Der Wert des URL-Parameters sollte bei der Dekodierung wie folgt lauten:

æøå

(die Zeichen sind norwegisch).

Ich habe keinen Zugriff auf den Server, daher kann ich nichts daran ändern.

301
Sindre Sorhus

Sie sollten jQuery nicht für so etwas verwenden!
Die moderne Methode besteht darin, kleine wiederverwendbare Module über einen Paketmanager wie Bower zu verwenden.

Ich habe ein winziges Modul erstellt, das die Abfragezeichenfolge in ein Objekt zerlegen kann. Benutze es so:

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
2
Sindre Sorhus
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}
418
James

Nachfolgend finden Sie das, was ich aus den Kommentaren hier erstellt habe, sowie das Beheben von Fehlern, die nicht erwähnt wurden (z. B. die tatsächliche Rückgabe von null und nicht von 'null'):

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

Was Sie wirklich wollen, ist das jQuery URL Parser Plugin . Mit diesem Plugin sieht das Abrufen des Werts eines bestimmten URL-Parameters (für die aktuelle URL) folgendermaßen aus:

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

Wenn Sie ein Objekt mit Parameternamen als Schlüssel und Parameterwerten als Werten möchten, rufen Sie einfach param() ohne ein Argument auf, wie folgt:

$.url().param();

Diese Bibliothek funktioniert auch mit anderen URLs, nicht nur der aktuellen:

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

Da es sich um eine vollständige URL-Analysebibliothek handelt, können Sie auch andere Informationen aus der URL abrufen, z. B. den angegebenen Port oder den Pfad, das Protokoll usw.:

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'

Es hat auch andere Funktionen. Weitere Dokumente und Beispiele finden Sie auf der Homepage .

Anstatt einen eigenen URI-Parser für diesen speziellen Zweck zu schreiben, funktioniert irgendwie in den meisten Verwenden Sie in diesen Fällen einen tatsächlichen URI-Parser. Abhängig von der Antwort kann Code aus anderen Antworten 'null' Anstelle von null zurückgeben, funktioniert nicht mit leeren Parametern (?foo=&bar=x), Kann nicht alle Parameter analysieren und zurückgeben Wiederholt die Arbeit sofort, wenn Sie die URL wiederholt nach Parametern usw. abfragen.

Verwenden Sie einen tatsächlichen URI-Parser, erfinden Sie keinen eigenen.

Für diejenigen, die jQuery ablehnen, gibt es eine Version des Plugins, die reines JS ist .

107
Lucas

Wenn Sie die URL-Parameter nicht kennen und ein Objekt mit den Schlüsseln und Werten in den Parametern erhalten möchten, können Sie Folgendes verwenden:

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

Aufruf von getParameters () mit einer URL wie /posts?date=9/10/11&author=nilbus würde zurückkehren:

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

Ich werde den Code hier nicht einfügen, da er noch weiter von der Frage entfernt ist, aber weareon.net hat eine Bibliothek veröffentlicht, die auch die Manipulation der Parameter in der URL ermöglicht:

43
Edward Anderson

Sie können die native location.search -Eigenschaft des Browsers verwenden:

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

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

Es gibt jedoch einige jQuery-Plugins, die Ihnen helfen können:

40
CMS

Basierend auf der 999 Antwort :

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

Änderungen:

  • decodeURI() wird durch decodeURIComponent() ersetzt
  • [?|&] Wird am Anfang des regulären Ausdrucks hinzugefügt
26
Eugene Yarmash

Der Parameter i muss hinzugefügt werden, damit die Groß- und Kleinschreibung nicht beachtet wird:

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

$.urlParam("key");
2
Yoshi

Zum Beispiel eine Funktion, die den Wert einer beliebigen Parametervariable zurückgibt.

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

Und so können Sie diese Funktion nutzen, vorausgesetzt, die URL lautet:

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

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

Im obigen Code hat die Variable "tech" den Wert "jQuery" und die Variable "blog" den Wert "jquerybyexample".

2
Rubyist

Nachdem ich alle Antworten gelesen hatte, erhielt ich diese Version mit + einer zweiten Funktion, um Parameter als Flags zu verwenden

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

jQuery-Code-Snippet zum Abrufen der in der URL gespeicherten dynamischen Variablen als Parameter und zum Speichern dieser Variablen als JavaScript-Variablen zur Verwendung mit Ihren Skripten:

$.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
<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter(id) oder getURLParameter(Id) Funktioniert genauso:)

0
user2310887

Es gibt hier eine Menge fehlerhaften Code und Regex-Lösungen sind sehr langsam. Ich habe eine Lösung gefunden, die bis zu 20x schneller ist als das Gegenstück zu Regex und die elegant einfach ist:

    /*
    *   @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 ist nicht das A und O, für diese Art von Problem kann die einfache Manipulation von Zeichenfolgen sehr viel effizienter sein. Codequelle .

0
George Anthony