2017-02-13 20 views
0

我需要从一个URL获取两个参数,并且它们可能会包含一个&符号或空格。作为搜索字符串的一部分。获取两个URL参数 - 但需要保存&符号

例子:mysite.com?param1=Bower & Wilkins?param2=Speakers

我意识到,鲍尔&威尔金斯包括获取第二个参数的明显标志,但我可以用别的东西代替它?

在尝试这个功能,可以轻松地返回一个参数:

URL: mysite.com?param1=Bower%20&%20Wilkins 

function getQueryStringValue(key) { 
    return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^]*))?)?.*$", "i"), "$1")); 
} 
var param1 = getQueryStringValue("param1"); // Bower & Wilkins 

我怎样才能获得的第二个参数,我怎么要建设URL。我可以使用另一个符号而不是&列出第二个参数吗?

我需要什么:需要

var param1 = getQueryStringValue("param1"); // Bower & Wilkins

var param2 = getQueryStringValue("param2"); // Speakers

+0

貌似[这](http://stackoverflow.com/questions/16622504/escaping-ampersand-in-url)是一个类似的问题。 –

回答

0

&帕拉姆内编码为%26。这意味着您需要在通过encodeURI运行参数之前替换 或在值上使用encodeURIComponent。

输入应为"mysite.com?param1=Bower%20%26%20Wilkins&param2=Speakers"

为了得到结果,你可以尝试这样的事情

function getQueryStringValue(url, key) { 
    var params = {}; 
    var url_params = url.split("?", 2); 
    if (url_params.length > 1) { 
     var param_list = url_params[1].split("&"); 
     param_list.map(function (param_str) { 
      var kv = param_str.split("=", 2); 
      params[kv[0]] = kv[1]; 
     }); 
    } 
    return (key in params)? decodeURIComponent(params[key]) : '' 
} 

var url = "mysite.com?param1=Bower%20%26%20Wilkins&param2=Speakers"; 
console.log("Bower & Wilkins" === getQueryStringValue(url, "param1")); 
console.log("Speakers" === getQueryStringValue(url, "param2")); 
console.log("" === getQueryStringValue(url, "param3")); 
+0

这工作,给我我需要的东西。谢谢! –