Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查询字符串解析:同时处理&;及;_Javascript_Url_Query String - Fatal编程技术网

Javascript 查询字符串解析:同时处理&;及;

Javascript 查询字符串解析:同时处理&;及;,javascript,url,query-string,Javascript,Url,Query String,我发现了大量关于StackOverflow的文章,其中提到了在Javascript中解析查询字符串的快速方法,但我没有发现如何处理&和作为分隔符 现在,我假设其中只有一个被设置为查询字符串的分隔符。例如,以下查询字符串: index.php?Param1=value&Param2=value;Param3=value 哪个是分隔符 是&,还是 它是第一个识别的定界字符,还是&优先于 是否都被视为分隔符,并且示例中的所有三个参数都被解析 在Javascript中,我一直使用以下函数:

我发现了大量关于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允许
也是

因此,为了处理
&
作为分隔符,我是否应该首先搜索(“&”)
索引,如果没有找到,则将分隔符设置为

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

以下是能够同时处理
&
的服务器

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


下面是定义URI的参数。

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

var s = qs.split(/[&;]/)
这将处理带有&和

编辑:

如果字符第一次出现,要在其中一个上拆分的帖子。希望URL首先包含分号,但检查是否出现分号可能更安全;如果有,就用它作为分隔符

根据这一点,由方案实施者决定如何使用URI保留字符。同样根据,分号是URI搜索部分中的保留字符,因此,如果存在分号,除非进行编码,否则将被视为分隔符。服务器实现者允许两者都允许开发人员不必转义符号,因此应使用其中一个

我将勇敢地以你为榜样

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


@VisioN No可能重复,因为此处接受的答案不处理
分隔符。使用分号作为分隔符已经过时很长时间了。您仍然看到它们吗?它可能已过时,但尚未删除。是的,我还在看他们。例如,
OTRS
使用它们。声明
&
是URL参数的唯一分隔符。Yes。然而,这是规范的意图,还是仅仅使用一个分隔符或另一个分隔符?例如,在我上面的示例中,它应该解析Param1、Param2和Param3,还是简单地解析Param1和Param2,而Param3被解释为Param2的一部分,因为分隔符被设置为
&
?@crush任何时候它匹配这些字符中的任何一个,它都会被拆分。@Mathletics我理解他的代码的功能。我在问规范需要什么。@粉碎规范是为了什么?URL参数化,或
split
方法?@Mathletics是W3C处理
&
的规范和建议。现在还不清楚您是应该在这两个点上进行拆分,还是将其中一个的第一次出现视为从该点开始的分隔符。例如,案例:
index.php?Param1=value&Param2=value;参数3=值
。规范是指这是三个参数,还是只有两个参数,第二个参数是
Param2=value;参数3=值
["Param1=value&Param2=value","Param3=value"]