我正在寻找一个jQuery插件,可以获得URL参数,并支持这个搜索字符串而不输出JavaScript错误:“畸形的URI序列”。如果没有jQuery插件支持这一点,我需要知道如何修改它来支持这一点。

?search=%E6%F8%E5

URL参数的值,当解码时,应该是:

æøå

(人物是挪威人)。

我没有访问服务器的权限,所以我不能在上面修改任何东西。


当前回答

如果你不知道URL参数是什么,并且想要获得一个包含参数中的键和值的对象,你可以使用这个:

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

用类似/posts的url调用getParameters() ?日期=9/10/11&作者=nilbus将返回:

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

我不会在这里包括代码,因为它甚至远离问题,但weareon.net发布了一个库,允许操作URL中的参数:

博客:http://blog.weareon.net/working-with-url-parameters-in-javascript/ 代码:http://pastebin.ubuntu.com/1163515/

其他回答

你不应该使用jQuery来做这样的事情! 现代的方法是通过包管理器(如Bower)使用小型可重用模块。

我创建了一个小模块,可以将查询字符串解析为对象。像这样使用它:

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

需要添加参数i,使其不区分大小写:

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

@pauloppenheim对答案进行了轻微修改,因为它不能正确处理可能是其他参数名称的一部分的参数名称。

例如:如果你有“appenv”和“env”参数,重新处理“env”的值可以提取“appenv”值。

Fix:

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

以下是我从这里的评论中创建的内容,以及修复没有提到的错误(例如实际返回null,而不是'null'):

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

例如,返回任意参数变量值的函数。

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

这就是你如何使用这个函数假设URL是,

“http://example.com/?technology=jquery&blog=jquerybyexample”。

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

所以在上面的代码变量"tech"将有"jQuery"作为值和"blog"变量的将是" querybyexample"。