如何在包含特殊字符的JavaScript中获取查询字符串值?

时间:2015-06-13 05:54:47

标签: javascript url query-string

我已按照这篇伟大帖子的回答:How can I get query string values in JavaScript?

但是,我遇到的问题是,在某些情况下,我的查询字符串值可能包含特殊字符,例如* + - / etc,例如:

?userid=de+8d49b7*8a85a3/222343

上述功能不适合这些。如何获取查询字符串值并包含特殊字符?我试过了:

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

var prodId = encodeURIComponent(getParameterByName('prodId'));

解决方案也必须在IE8 +中工作。

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

function getParameterByName(name,ovr) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(ovr || location.search);
    return results === null ? "" : decodeURIComponent(results[1]);
}

var prodId = getParameterByName('prodId','?prodId=de+8d49b7*8a85a3/222343&userId=23243*--++/231');
console.log('Url: ?prodId=?prodId=de+8d49b7*8a85a3/222343&userId=23243*--++/231\nprodId: ' + prodId);

只需从返回的语句中删除此.replace(/\+/g, " "),这样您就可以使用+字符代替""(空格)。

重要的是要注意,这会对您获得的值产生歧义,因为网址不能包含空格,因此当您对网址进行编码时,它将包含+字符而不是空格。如果您愿意使用此方法,则必须确保您检索的所有值都没有空格。

答案 1 :(得分:0)

使用以下代码删除查询字符串中的特殊字符。

var value="testdkldskdskkd@#$$%^dsjse"
var cleanString = value.replace(/[/^]/g, "");
console.log(cleanString)