【问题标题】:Get two URL parameters - but need to preserve & symbol获取两个 URL 参数 - 但需要保留 & 符号
【发布时间】:2017-07-01 19:37:46
【问题描述】:

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

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

我知道 Bower & 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

【问题讨论】:

  • 看起来this 是一个类似的问题。

标签: javascript url-parameters uriencoding


【解决方案1】:

参数中的& 需要编码为%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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多