【问题标题】:How to get query string values in JavaScript containing special characters?如何在 JavaScript 中获取包含特殊字符的查询字符串值?
【发布时间】:2015-06-13 05:54:46
【问题描述】:

我已经关注了这篇精彩帖子的答案:How can I get query string values in JavaScript?

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

?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+ 中运行。

【问题讨论】:

  • 如果您没有正确编码 URI 组件,请不要指望任何通用解决方案对您有用。
  • @naomik - 多么可爱的回应。

标签: javascript url query-string


【解决方案1】:

这应该可以解决问题:

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, " "),这样您就可以使用 + 字符而不是 ""(空格)。

请务必注意,这会给您获取的值带来歧义,因为 URL 不能包含空格,因此当您对 URL 进行编码时,它将包含 + 字符而不是空格。如果您愿意使用此方法,则必须确保您检索的所有值都没有空格。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 请在你的答案中使用正确的拼写和缩进
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2016-08-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多