我在 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 。