43

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

http://example.com?ks4day=星期五+9 月+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>
4

5 回答 5

138

decodeURIComponent尽管 Bibhu 的答案适用于这种情况,但如果您的 URI 字符串中有编码字符,则需要添加。您还需要确保在解码之前进行替换,以防您+的 URI 字符串 (as %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'
于 2014-06-25T19:54:18.930 回答
11

为此,您可以使用 replace()

var dateString = 'Friday+September+13th';
var s = dateString .replace(/\+/g, ' ');
于 2013-09-10T11:22:40.773 回答
11

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

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

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

于 2019-07-12T06:51:25.477 回答
1

您是否尝试过https://www.npmjs.com/package/querystring

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

返回

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

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

于 2020-07-20T20:38:46.723 回答
-2

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

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

于 2013-09-10T11:29:19.273 回答