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

?search=%E6%F8%E5

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

æøå

(人物是挪威人)。

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


当前回答

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

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

其他回答

你真正想要的是jQuery URL解析器插件。使用这个插件,获取特定URL参数的值(对于当前URL)看起来像这样:

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

如果你想要一个以参数名为键,以参数值为值的对象,你只需要调用不带参数的param(),就像这样:

$.url().param();

这个库也适用于其他url,而不仅仅是当前的url:

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

因为这是一个完整的URL解析库,你也可以从URL中获得其他信息,比如指定的端口,或者路径,协议等:

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'

它还有其他功能,请查看其主页以获得更多文档和示例。

在大多数情况下,不要为这个特定的目的编写自己的URI解析器,而是使用一个实际的URI解析器。根据答案的不同,来自其他答案的代码可以返回'null'而不是null,不能与空参数(?foo=&bar=x)一起工作,不能一次解析并返回所有参数,如果你反复查询URL的参数等,重复这项工作。

使用实际的URI解析器,不要自己发明。

对于那些不喜欢jQuery的人来说,这个插件有一个纯JS版本。

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

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

Fix:

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

$.urlParam("key");

在阅读了所有的答案后,我最终得到了这个版本+第二个使用参数作为标志的函数

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

以防你们有localhost/index。xsp这样的url ?A =1#一些东西,你需要得到参数而不是哈希值。

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