106

我今天看到了以下网址:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497

注意查询字符串开头的双问号:

??blogid=122&entry_id=64497

我的浏览器似乎没有任何问题,并且运行了一个快速书签:

javascript:alert(document.location.search);

刚刚给了我上面显示的查询字符串。

这是一个有效的网址吗?我之所以如此迂腐(假设我是)是因为我需要解析这样的 URL 以获取查询参数,并且支持双问号需要对我的代码进行一些更改。显然,如果他们在野外,我需要支持他们;我主要是好奇是否是我没有完全遵守 URL 标准的错,或者它实际上是一个非标准的 URL。

4

2 回答 2

123

是的,它是有效的。只有 URL 中的 ?一个才有意义,后面的任何一个都被视为文字问号:

查询组件由第一个问号 ("?") 字符指示,并以数字符号 ("#") 字符或 URI 结尾终止。

...

字符斜线(“/”)和问号(“?”)可以表示查询组件内的数据。请注意,当将此类数据用作相对引用的基本 URI(第 5.1 节)时,一些较旧的错误实现可能无法正确处理此类数据,显然是因为它们在查找分层分隔符时无法区分查询数据和路径数据。然而,由于查询组件通常用于以“key=value”对的形式携带标识信息,并且一个经常使用的值是对另一个 URI 的引用,因此有时避免对这些字符进行百分比编码会更好地提高可用性。

https://www.rfc-editor.org/rfc/rfc3986#section-3.4

于 2010-05-27T19:22:00.383 回答
30

作为一个切线相关的答案,foo?spam=1?&eggs=3给参数spam1?

于 2016-02-17T02:18:34.430 回答