获取转义的URL参数

我正在寻找一个jQuery插件,可以获取URL参数,并支持这个searchstring,而不会输出JavaScript错误:“格式不正确的URI序列”。 如果没有支持这个的jQuery插件,我需要知道如何修改它来支持这个。

?search=%E6%F8%E5 

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

 æøå 

(字符是挪威语)。

我没有访问服务器,所以我不能修改任何东西。

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

下面是我从这里的注释创build的,以及修复未提及的错误(例如实际返回null,而不是'null'):

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

你真正想要的是jQuery URL分析器插件 。 使用这个插件,获取特定URL参数(对于当前URL)的值如下所示:

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

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

 $.url().param(); 

这个库也适用于其他的网站,而不仅仅是目前的网站:

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

由于这是一个完整的URLparsing库,您还可以从URL获取其他信息,例如指定的端口或path,协议等:

 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' 

它还有其他function,请查看其主页获取更多文档和示例。

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

使用一个真正的URIparsing器,不要发明自己的。

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

如果您不知道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?date=9/10/11&author=nilbus这样的URL调用getParameters()会返回:

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

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

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

您可以使用浏览器原生的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插件可以帮助你:

  • 查询对象
  • getURLParam

基于999的答案 :

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

变化:

  • decodeURI()decodeURI()replace
  • 在正则expression式的开头添加[?|&]

需要添加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"); 

例如,一个返回任何参数variables值的函数。

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

所以在上面的代码中,variables“tech”将有“jQuery”作为值,“blog”variables将是“jquerybyexample”。

你不应该使用jQuery这样的东西!
现代的方法是通过像Bower这样的软件包pipe理器使用小型的可重用模块。

我创build了一个小模块 ,可以将查询stringparsing为一个对象。 像这样使用它:

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

阅读所有的答案后,我结束了这个版本与第二个函数使用参数作为标志

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

这里有很多bug代码,正则expression式解决scheme非常慢。 我发现了一个比正则expression式快20倍的解决scheme,并且非常简单:

  /* * @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")); 

正则expression式不是最终的解决scheme,对于这种types的问题,简单的string操作可以更高效地处理大量数据。 代码源 。

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

getURLParameter(id)getURLParameter(Id)工作相同getURLParameter(Id)

jQuery代码片段获取存储在url中的dynamicvariables作为参数,并将它们存储为JavaScriptvariables,随时可用于脚本:

 $.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 
 function getURLParameters(paramName) { var sURL = window.document.URL.toString(); if (sURL.indexOf("?") > 0) { var arrParams = sURL.split("?"); var arrURLParams = arrParams[1].split("&"); var arrParamNames = new Array(arrURLParams.length); var arrParamValues = new Array(arrURLParams.length); var i = 0; for (i=0;i<arrURLParams.length;i++) { var sParam = arrURLParams[i].split("="); arrParamNames[i] = sParam[0]; if (sParam[1] != "") arrParamValues[i] = unescape(sParam[1]); else arrParamValues[i] = "No Value"; } for (i=0;i<arrURLParams.length;i++) { if(arrParamNames[i] == paramName){ //alert("Param:"+arrParamValues[i]); return arrParamValues[i]; } } return "No Parameters Found"; } } 

我创build了一个简单的函数来获取URL中的URL参数,如下所示:

 .....58e/web/viewer.html?page=*17*&getinfo=33 function buildLinkb(param) { var val = document.URL; var url = val.substr(val.indexOf(param)) var n=parseInt(url.replace(param+"=","")); alert(n+1); } buildLinkb("page"); 

输出: 18

以防万一你们有像localhost / index.xsp?a = 1#的url,你需要得到的参数不是散列。

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

@pauloppenheim对答案稍作修改,因为它不能正确处理可能成为其他参数名称一部分的参数名称。

例如:如果您有“appenv”和“env”参数,则重新设置“env”的值可以提取“appenv”值。

固定:

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

这可能有帮助。

 <script type="text/javascript"> $(document).ready(function(){ alert(getParameterByName("third")); }); function getParameterByName(name){ var url = document.URL, count = url.indexOf(name); sub = url.substring(count); amper = sub.indexOf("&"); if(amper == "-1"){ var param = sub.split("="); return param[1]; }else{ var param = sub.substr(0,amper).split("="); return param[1]; } } </script>