在URL中有多个问号有效吗?

在URL中有多个问号有效吗?,url,parsing,query-parameters,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吗?我之所以如此

我今天看到了以下网址:

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标准的过错,还是它实际上是一个非标准URL。

是的,它是有效的。只有URL中的第一个
具有重要意义,之后的任何一个都被视为文字问号:

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

字符斜杠(“/”)和 问号(“?”)可以表示数据 在查询组件中。当心 那是一些老的,错误的 实现可能无法处理这样的问题 当数据用作 相对引用的基URI (第5.1节),显然是因为 无法区分查询数据和 查找时的路径数据 层次分隔符。但是, 查询组件通常用于 将识别信息放在 “键=值”对和一对的形式 常用值是一个参考值 对于另一个URI,它有时更好 为了避免可用性 对这些字符进行编码的百分比


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

,那么这是否意味着第一个查询参数名为“?blogid”而不是“blogid”?那可能很有趣…@GalacticCowboy-是的,我也想到了同样的事情。您是正确的-Firebug确认第一个查询参数实际上是
?blogid
。它实际上似乎是一个非必要的参数,也就是说,页面上有任意数量的问号,或者完全忽略了参数。幸运的是,尽管如此,我不需要更改代码。我使用
indexOf()
来定位问号,所以它找到了第一个出现的位置。然后我在每个
&
处拆分查询参数,然后在每个
=
处拆分它们的名称/值对。是的。如果没有
.htaccess
或类似技巧。如果我们将
foo
更改为
script.php
并发出此请求
script.php?spam=1?&eggs=3
,则
var\u dump($\u GET)
显示
array(2){[“spam”]=>string(2)“1?”[“eggs”=>string(1)“3”