2

我在 StackOverflow 上找到了很多文章,其中提到了在 Javascript 中解析查询字符串的快速方法,但我还没有找到如何处理这两者&以及;作为分隔符的方法。

现在,我假设只有其中一个被设置为查询字符串的分隔符。例如,以下查询字符串:

index.php?Param1=value&Param2=value;Param3=value

哪个是分隔符?

  • &,还是;
  • 它是第一个识别的分隔符,还是&优先于;
  • 都被视为分隔符,并且示例中的所有三个参数都已解析?

在 Javascript 中,我一直在使用以下函数:

/**
 * Gets the value of a parameter from a URI.
 * @param href The full URI to search. Must at least start with a ? query string delimiter.
 * @param key  The key of the param for which to retrieve the value.
 * @param def  A default value to return in the case that the key cannot be found in the query string.
 * @return The value of the param if the key is found, otherwise returns def.
 */
function getURIParam(href, key, def) {
    if (arguments.length == 2) def = null;

    var qs = href.substring(href.indexOf('?') + 1);
    var s = qs.split('&');
    for (var k in s) {
        var s2 = s[k].split('=');
        if (s2[0] == key)
            return decodeURIComponent(s2[1]);
    }

    return def;
}

这只是根据 . 拆分每个键/值对&。只要分隔符始终为 ,它就可以很好地工作&。然而,正如我们所知,情况并非总是如此,也不应该强制执行,因为 RFC 也允许这样做;

所以,为了同时处理&;作为分隔符,我应该先搜索一个indexOf("&"),如果没有找到,将分隔符设置为;?

根据分隔符可以是&or的规则解析 URL 的正确方法是;什么?

这是关于能够同时处理&;.

我们建议 HTTP 服务器实现者,特别是 CGI 实现者支持使用“;” 代替“&”来省去作者以这种方式转义“&”字符的麻烦。

这是定义 URI的RFC 1738 。

4

1 回答 1

1

您可以使用 reg ex 在两个分隔符上进行拆分。

var s = qs.split(/[&;]/)

这将处理带有 & 和 ; 的字符串

编辑:

鉴于角色的第一次出现,这里是一个可以拆分的帖子。希望 URL 首先包含分号,但检查是否出现 ; 可能更安全。如果存在,只需将其用作分隔符。

根据RFC3986,由方案实现者决定如何使用 URI 保留字符。此外,根据RFC 1738,分号是 URI 搜索部分中的保留字符,因此,如果存在,则被视为分隔符,除非已编码。W3C 建议服务器实现者允许两者都允许开发人员不必须逃脱&符号,因此应该使用其中一个或另一个。

我会勇敢你的例子

index.php?Param1=value&Param2=value;Param3=value

作为

["Param1=value&Param2=value","Param3=value"]
于 2013-02-11T20:09:51.007 回答