302 votes

Obtenir un paramètre URL échappé

Je suis à la recherche d'un plugin jQuery qui peut obtenir des paramètres d'URL, et prendre en charge cette chaîne de recherche sans afficher l'erreur JavaScript : "séquence URI malformée". S'il n'existe pas de plugin jQuery prenant en charge cette chaîne, je dois savoir comment le modifier pour qu'il le fasse.

?search=%E6%F8%E5

La valeur du paramètre URL, une fois décodée, devrait être :

æøå

(les personnages sont norvégiens).

Je n'ai pas accès au serveur, donc je ne peux rien y modifier.

417voto

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

294voto

radicand Points 3168

Voici ce que j'ai créé à partir des commentaires ici, ainsi que la correction de bugs non mentionnés (comme le fait de retourner null, et non 'null') :

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

107voto

Lucas Points 3372

Ce que vous voulez vraiment, c'est le Plugin jQuery URL Parser . Avec ce plugin, obtenir la valeur d'un paramètre URL spécifique (pour l'URL actuelle) ressemble à ceci :

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

Si vous voulez un objet avec des noms de paramètres comme clés et des valeurs de paramètres comme valeurs, il vous suffit d'appeler param() sans argument, comme ceci :

$.url().param();

Cette bibliothèque fonctionne également avec d'autres urls, pas seulement l'url actuelle :

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

Comme il s'agit d'une bibliothèque d'analyse d'URL complète, vous pouvez également obtenir d'autres informations à partir de l'URL, comme le port spécifié, ou le chemin, le protocole, 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'

Il a également d'autres caractéristiques, consultez son site web. page d'accueil pour plus de documents et d'exemples.

Au lieu d'écrire votre propre analyseur d'URI dans ce but spécifique que un peu comme travaille dans le plus Dans certains cas, utilisez un analyseur d'URI. Selon la réponse, le code des autres réponses peut retourner 'null' au lieu de null ne fonctionne pas avec des paramètres vides ( ?foo=&bar=x ), ne peut pas analyser et renvoyer tous les paramètres à la fois, répète le travail si vous demandez plusieurs fois des paramètres à l'URL, etc.

Utilisez un analyseur URI réel, n'inventez pas le vôtre.

Pour ceux qui ne veulent pas de jQuery, il y a une version du plugin qui est purement JS .

43voto

nilbus Points 5476

Si vous ne savez pas quels seront les paramètres de l'URL et que vous voulez obtenir un objet avec les clés et les valeurs qui sont dans les paramètres, vous pouvez utiliser ceci :

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

Appeler getParameters() avec une url telle que /posts?date=9/10/11&author=nilbus reviendrait :

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

Je ne vais pas inclure le code ici car il est encore plus éloigné de la question, mais weareon.net a mis en ligne une bibliothèque qui permet également de manipuler les paramètres de l'URL :

40voto

CMS Points 315406

Vous pouvez utiliser le navigateur natif recherche de lieu propriété :

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

Mais il existe des plugins jQuery qui peuvent vous aider :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X