2017-02-13 19 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

這工作,給我我需要的東西。謝謝! –