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

时间:2010-05-27 19:19:15

标签: url parsing query-parameters

我今天看到了以下网址:

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,那是我的错。

2 个答案:

答案 0 :(得分:95)

是的,它是有效的。只有URL中的第一个 ?具有重要性,在将其视为文字问号之后才会有任何意义:

  

查询组件由表示   第一个问号(“?”)   字符并以数字结尾   符号(“#”)字符或结尾   URI。

...

  

字符斜杠(“/”)和   问号(“?”)可能代表数据   在查询组件中。谨防   有些年纪大了,错了   实现可能无法处理   数据被正确使用时   相对引用的基URI   (第5.1节),显然是因为他们   无法区分查询数据   寻找时的路径数据   分层分隔符。但是,作为   查询组件经常用于   携带识别信息   形式为“key = value”对和一对   经常使用的价值是一个参考   到另一个URI,它有时更好   为了可用性而避免   百分比编码这些字符。

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

答案 1 :(得分:20)

作为切线相关的答案,foo?spam=1?&eggs=3为参数spam提供值1?