javascript - 获取转义URL参数

  显示原文与译文双语对照的内容

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

 
?search=%E6%F8%E5

 

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

 
æøå

 

( 字符是挪威语) 。

我没有访问服务器的权限,因此无法修改它。

时间:

下面是我从这里创建的注释,以及修复 Bug 没有提到的( 例如实际返回 null,而不是'空'):


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

你真正想要的是的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' 于参数etc,根据答案,相关代码来代替 null ( ?foo=&bar=x ),从不用空参数,不能解析,并返回所有参数一次,重复的工作如果你重复查询该URL到达

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

对于那些jQuery外,还有一个版本的插件,它是纯 JS 回避者。

你可以使用浏览器原生 location.search 属性:


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

但是有一些jQuery插件可以帮助你:

回答上 999, based:


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

更改:

  • decodeURI()decodeURIComponent() 替换
  • [?|&] 在正则表达式的开头添加

需要添加i 参数以使它的不区分大小写:


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

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


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

因此在上面的代码变量"技术技术"中将有"jquery"作为值,"博客将"变量为"jquerybyexample"。

你不应该用jQuery来做类似这样的事情 !
现代的方式是通过package-manager像 Bower 一样使用小型可以重用模块。

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


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

...