或许你称它为“尖锐” - #符号。
我遇到过一个实例,#!和#在一个URL中同时使用。从阅读其他文章,包括RFC,我无法理解这是否是合法的组合。当遇到这样的页面时,Mozilla浏览器(在本例中为Iceweasel)将URL显示为2#,而Chrome只显示一个,但不久之后就会死亡(包含该页面的选项卡变得无响应并崩溃 - 但可能没有连接)
现在,我的问题是,在一个URL中同时使用它们是合法的还是冗余的(应该规范化),还是仅仅是Mozilla浏览器中的错误?所以,假设我正在制作一个AJAX请求,或试图浏览浏览器历史记录 - 如果我遇到这种情况,该怎么办?
RFC-3986:http://tools.ietf.org/html/rfc3986#section-3.4,应该澄清它......以防万一。
另外:https://developers.google.com/webmasters/ajax-crawling/docs/specification Google抓取工具如何查看内容。
答案 0 :(得分:13)
片段的格式只允许使用斜杠,问号和pchar
。如果您查找RFC,您会看到哈希标记不是有效的pchar
。
但是,浏览器会尽量通过处理重复哈希来读取无效的网址,就像它们被转义一样,您可以通过检查window.location.hash
(在IE,Firefox和Chrome中)的值来查看
http://www.example.com/hey#foo#bar
与
的window.location.hash
相同
http://www.example.com/hey#foo%23bar
答案 1 :(得分:2)
@apsillers提到它可能是合法的。但除非必要,否则我会避免使用它,因为它可能会对网址造成一定的混淆。
那种网址:
http://www.example.com/hey#foo#bar
似乎让我感到困惑,对普通用户和搜索引擎来说会更加混乱。
答案 2 :(得分:2)
至少在提到RFC 3986时,我的回答是明确的。 但是您不仅需要查看3.4
Section 3定义URI的结构如下:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
(我只是上半部分,与URL有关)
因此,要回答您的问题,您必须查看所有部分:
ALPHA *( ALPHA / DIGIT / "+" / "-" / "."
)因此,到目前为止,除了要终止URI(如果要使用至少一个散列;-)
以外,就不允许使用散列;最后:
总结一下: 兼容的URL(或URI)中仅允许一个“#”作为URL片段的标记。 尤其是应该在路径中的哈希符号(至少从外观来看,因为后面会有斜线)在正式终止路径部分时会出现问题。
这可能会导致问题,例如在使用此功能的单页应用程序中,因为散列后的导航是在客户端而不是在服务器上完成的。在这种情况下,SPA应该确保在接收时正确处理了其余URL,其中可能包括(特定于浏览器的)URL编码的查询和片段。