&安培;和#在从queryString获取值时无法识别

时间:2016-12-20 12:07:58

标签: javascript

我正在尝试从此网址获取查询和过滤值:

http://xyz/search.page?query=apple&filter=all

使用此功能:

getParameters: function(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(([^&#]*)=|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(unescape(results[2].replace(/\+/g, " ")));
}

它将返回query = apple但是如果我们有像apple#或apple&它不会考虑那些仍将归还苹果的特殊性格。 但对于所有其他特殊人物,如!,@,*这将返回苹果!或苹果@等 有人可以帮助我获得#和&的正确结果也, 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果可能的话,最好使用浏览器的解析器,除非你在NodeJS中运行。

以下是您的功能的快速实现:

function getParameters(name, url) {
    var parser = document.createElement('a');
    parser.href = url;
    
    var vars = parser.search.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == name) {
            return decodeURIComponent(pair[1]);
        }
    }

    return null;
}

console.log(getParameters("filter", "http://xyz/search.page?query=apple&filter=all"));