删除 URL 查询字符串中的加号 (+)

IT技术 javascript jquery
2021-02-16 08:35:48

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

http://example.com?ks4day=星期五+九月+13日

编辑: 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>
5个回答

尽管 Bibhu 的答案适用于这种情况,但decodeURIComponent如果您的 URI 字符串中有编码字符,则需要添加您还希望确保在解码之前进行替换,以防万一您+的 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 函数进行解码,该函数也不会解码加号。这个答案对我很有帮助,可能对大多数最终来到这里的人都有帮助。
2021-04-22 08:35:48
非常适合我。当您使用 ajax 获取输入值时,它避免了以下更改。1)。空格变成加号。2)。加号登录 %20
2021-05-01 08:35:48
谢谢!我不知道 decodeURIComponent() 函数。
2021-05-14 08:35:48

您可以为此使用 replace()

var dateString = 'Friday+September+13th';
var s = dateString .replace(/\+/g, ' ');
当日期被我的 CRM 程序合并时,日期会因人而异,我将如何使用 replace() 代码?
2021-04-18 08:35:48

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

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

Ps:旧浏览器也有很好的polyfill

使用本机实现总是最好的。肯定是 2020 年的最佳答案。
2021-05-07 08:35:48
这绝对是最好的答案,其他的至少已经过时了
2021-05-10 08:35:48

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

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

回报

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

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

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

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

@SalmanA - 你应该decodeURIComponent之前替换“+” ,而不是之后 - 否则你会错误地将“%2B”解码为“”。
2021-04-19 08:35:48
呜呼。使用 decodeURIComponent 让它工作。例如。<script type="text/javascript">document.write(decodeURIComponent(qs("ks4day")).replace(/‌ \+/g, " "));</script>
2021-04-24 08:35:48
如果您的电话号码在该字符串中包含国家/地区代码怎么办?更换是最糟糕的选择。解码不会删除优点。
2021-04-29 08:35:48
另请查看有关 decodeURI() 的文档:w3schools.com/jsref/jsref_decodeuri.asp
2021-05-04 08:35:48
@ user2764485,您无法在解码后进行替换,因为您会将“%2b”解码为“”。这是错误的。
2021-05-05 08:35:48