【发布时间】:2013-01-27 00:12:31
【问题描述】:
我在 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("&"),如果没有找到,将分隔符设置为;?
根据分隔符可以是& 或; 的规则解析URL 的正确方法是什么?
这是服务器上的W3C Recommendation 能够同时处理& 和;。
我们建议 HTTP 服务器实现者,尤其是 CGI 实现者支持使用“;”代替“&”来保存作者 以这种方式转义“&”字符的麻烦。
这里是 RFC 1738,它定义了 URI。
【问题讨论】:
-
@VisioN 不,因为据我所知,那里接受的答案不处理
;分隔符。 -
使用分号作为分隔符已经过时了很长时间。你还在看他们吗?
-
它可能已过时,但未删除。是的,我还在看他们。例如,
OTRS使用它们。 -
W3C working draft 声明
&是 URL 参数的唯一分隔符。
标签: javascript url query-string