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