在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”