在URL中有多个问号是否有效?

Bun*_*gle 85 url parsing query-parameters

我今天遇到了以下网址:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Run Code Online (Sandbox Code Playgroud)

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

??blogid=122&entry_id=64497
Run Code Online (Sandbox Code Playgroud)

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

javascript:alert(document.location.search);
Run Code Online (Sandbox Code Playgroud)

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

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

Amb*_*ber 99

是的,它是有效的.只有URL中的 ?一个具有重要性,在将其视为文字问号之后:

查询组件由第一个问号("?")字符表示,并以数字符号("#")字符或URI的末尾结束.

...

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

http://tools.ietf.org/html/rfc3986#section-3.4

  • 那么这是否意味着第一个查询参数被命名为"?blogid"而不是"blogid"?这可能很有趣...... (9认同)
  • @GalacticCowboy - 是的,同样的事情发生在我身上.你是对的 - Firebug确认第一个查询参数实际上是`?blogid`.它实际上似乎是一个非必要的参数,即页面在那里提供相同的任意数量的问号,或完全省略参数. (3认同)

Hil*_*way 22

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