【问题标题】:Remove plus sign (+) in URL query string删除 URL 查询字符串中的加号 (+)
【发布时间】:2020-12-16 17:38:45
【问题描述】:

我正在尝试获取以下 URL 中的字符串以显示在我的网页上。

http://example.com?ks4day=Friday+September+13th

编辑: URL 中的日期会因人而异,因为它已被我的 CRM 程序合并。

我可以使用下面的代码让它显示在我的网页上,问题是加号 (+) 也出现了。

例如。周五+9月+13日

我需要它做的是用空格替换加号(+),所以它看起来像这样:

例如。 9 月 13 日星期五

我是新手,所以我在解决它时遇到了一些麻烦。

任何帮助将不胜感激。

这是我在 .js 文件中使用的代码

      function qs(search_for) {
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0  && search_for == parms[i].substring(0,pos)) {
            return parms[i].substring(pos+1);;
        }
    }
    return "";
}

这是我在网页上用来显示的代码

     <script type="text/javascript">document.write(qs("ks4day"));</script>

【问题讨论】:

  • str.replace('+', ' '); 将用提供的字符串中的空格替换 +
  • decodeURIComponent("Is+it+friday+the+13th%3F").replace(/\+/g, " ")
  • @SalmanA - 其他方式:decodeURIComponent("1+%2B+2+%3D+3".replace(/\+/g, '%20')) 否则你会错误地解码“%2B”
  • @user2764485 你应该先做.replace(/\+/g, " "),而不是最后,就像上面描述的@cloudfeet。否则正确编码的加号将被替换为空格,不正确!

标签: javascript jquery


【解决方案1】:

虽然 Bibhu 的答案适用于这种情况,但如果您的 URI 字符串中有编码字符,则需要添加 decodeURIComponent。您还需要确保在解码之前进行替换,以防您的 URI 字符串中有合法的+(如%2B)。

我相信这是最好的通用方法:

var x = qs("ks4day");        // 'Friday+September+13th'
x = x.replace(/\+/g, '%20'); // 'Friday%20September%2013th'
x = decodeURIComponent(x);   // 'Friday September 13th'

以下是它可能有用的示例:

var x = '1+%2B+1+%3D+2'; 
x = x.replace(/\+/g, '%20'); // '1%20%2B%201%20%3D%202'
x = decodeURIComponent(x);   // '1 + 1 = 2'

【讨论】:

  • 我在寻求专门针对加号的帮助时发现了这个问题。即使我已经在使用 Node 的 unescape 函数进行解码,该函数也不会解码加号。这个答案对我很有帮助,可能对大多数最终来到这里的人都有帮助。
  • 谢谢!我不知道 decodeURIComponent() 函数。
  • 完美地为我工作。当您使用 ajax 获取输入值时,它避免了以下更改。 1)。空格成加号。 2)。加号登录 %20
【解决方案2】:

你可以使用 replace() 来达到这个目的

var dateString = 'Friday+September+13th';
var s = dateString .replace(/\+/g, ' ');

【讨论】:

    【解决方案3】:

    使用正则表达式解析字符串通常容易出错。值得庆幸的是,所有现代浏览器都提供了URLSearchParams 来以正确的方式处理来自 url 字符串的参数:

    var params = new URLSearchParams(window.location.search);
    var value = params.get('ks4day');
    // "Friday September 13th"
    

    Ps:还有一个不错的polyfill老浏览器。

    【讨论】:

    • 这绝对是最好的答案,其他的至少已经过时了
    • 使用本机实现总是最好的。肯定是截至 2020 年的最佳答案。
    【解决方案4】:

    你试过https://www.npmjs.com/package/querystring吗?

    import { parse } from 'querystring'; 
    parse('ks4day=Friday+September+13th')
    

    返回

    { 'ks4day': 'Friday September 13th' }
    

    假设你正在使用像 Webpack 这样知道如何处理导入语句的东西

    【讨论】:

    • 简单最好的。
    【解决方案5】:

    如果这就是您正在做的事情,加号将不会是唯一让您感到困难的符号。撇号 (')、等号 (=)、加号 (+) 以及基本上不在允许的 URL 字符中的任何内容(请参阅Percent-encoding@Wikipedia)都会被转义。

    您很可能正在寻找decodeURIComponent 函数。

    【讨论】:

    • 还要检查 decodeURI() 的文档:w3schools.com/jsref/jsref_decodeuri.asp
    • @SalmanA - 你应该替换 "+" before decodeURIComponent,而不是之后 - 否则你会错误地将 "%2B" 解码为 " "。
    • 呜呼。让它工作使用 decodeURIComponent。例如。
    • 如果您的电话号码在该字符串中包含国家/地区代码怎么办?更换是最糟糕的选择。解码不会删除加号。
    • @user2764485,解码后无法进行替换,因为您会将“%2b”解码为“”。这是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多