一个 URL 中有多个问号是不是有效?
Posted
技术标签:
【中文标题】一个 URL 中有多个问号是不是有效?【英文标题】:Is it valid to have more than one question mark in a URL?一个 URL 中有多个问号是否有效? 【发布时间】:2011-02-24 20:00:24 【问题描述】:我今天看到了以下网址:
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。
【问题讨论】:
幸运的是,尽管如此,我不需要更改我的代码。我使用indexOf()
来定位问号,所以它选择了第一次出现的位置。然后我在每个 &
处拆分 query_parameters,然后在每个 =
处拆分它们的名称/值对。
【参考方案1】:
是的,它是有效的。只有 first 在 URL 中的?
有意义,任何在它之后的都被视为文字问号:
查询组件由 第一个问号(“?”) 字符并以数字结尾 符号 ("#") 字符或结尾 URI。
...
字符斜线(“/”)和 问号(“?”)可能代表数据 在查询组件中。谨防 一些旧的,错误的 实现可能无法处理此类 数据正确时,它被用作 相对引用的基本 URI (第 5.1 节),显然是因为他们 无法区分查询数据和 查找时的路径数据 分层分隔符。然而,作为 查询组件通常用于 携带识别信息在 “key=value”对的形式和一个 常用值是参考 到另一个 URI,有时会更好 为了避免可用性 对这些字符进行百分比编码。
https://www.rfc-editor.org/rfc/rfc3986#section-3.4
【讨论】:
那么这是否意味着第一个查询参数被命名为“?blogid”而不是“blogid”?那可能很有趣... @GalacticCowboy - 是的,我也发生了同样的事情。你是对的 - Firebug 确认第一个查询参数实际上是?blogid
。它实际上似乎是一个非必要参数,即页面提供相同的任何数量的问号,或者完全省略该参数。【参考方案2】:
作为切线相关的答案,foo?spam=1?&eggs=3
为参数spam
提供值1?
【讨论】:
是的。如果没有.htaccess
或类似的技巧。如果我们将foo
更改为script.php
并提出此请求script.php?spam=1?&eggs=3
然后var_dump($_GET)
显示array(2) ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3"
以上是关于一个 URL 中有多个问号是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
href=url?page=1 问号后面的参数能不能不在地址栏显示