2017-02-13 4 views
0

Мне нужно получить два параметра из URL-адреса, и они могут потенциально содержать символ или пробел &. как часть строки поиска.Получите два параметра URL-адреса, но нужно сохранить & символ

Пример: mysite.com?param1=Bower & Wilkins?param2=Speakers

Я понимаю, что Бауэр & Wilkins содержит очевидный символ для получения второго параметра, но я могу заменить его чем-то другим?

При попытке эту функцию, можно легко вернуть один параметр:

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

Это сработало и дало мне то, что мне нужно. Благодаря! –

Смежные вопросы