我发现很多关于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("&")
,如果没有找到,请将分隔符设置为{{1 }}?
根据分隔符可以是;
还是&
的规则解析URL的正确方法是什么?
以下是服务器上的W3C Recommendation能够同时处理;
和&
。
我们建议使用HTTP服务器实现者,特别是CGI 实现者支持使用“;”取代“&”保存作者 逃避“&”的麻烦这种方式的人物。
这是定义URI的RFC 1738。
答案 0 :(得分:1)
您可以使用reg ex分割两个分隔符。
var s = qs.split(/[&;]/)
这将处理带有和&的字符串。和;
编辑:
here是一个在一个或另一个上分裂的帖子,因为第一次出现该角色。希望URL首先包含分号,但检查是否有任何出现可能更安全;并且只使用它作为分隔符(如果存在)。
根据RFC3986,由方案实现者决定如何使用URI保留字符的使用。另外根据RFC 1738,分号是URI的搜索部分中的保留字符,因此,如果存在,则被视为分隔符,除非编码。服务器实现者允许的W3C recommends两者都允许开发人员不必逃避&符号,因此应该使用其中一个。
我会强悍你的
的例子index.php?Param1=value&Param2=value;Param3=value
as
["Param1=value&Param2=value","Param3=value"]