是什么解释了Firefox和Safari对包含多个#符号的用户提供的URI的不同处理方式?哪个是对的'?

Jim*_*ler 6 browser safari firefox http

在Firefox 4.0.1中,将以下内容粘贴到地址栏中

http://www.w3.org/#one#two
Run Code Online (Sandbox Code Playgroud)

请注意,浏览器导航到w3.org首页,地址栏仍然可以读取

http://www.w3.org/#one#two
Run Code Online (Sandbox Code Playgroud)

在Safari 5.0.4中也这样做.请注意,浏览器也会导航,但地址栏文本会被修改为读取

http://www.w3.org/#one%23two
Run Code Online (Sandbox Code Playgroud)

请注意,字符串中哈希的第一个哈希外观未被更改,但第二个哈希值被修改为编码格式(也称为"转义")%23.

假设Safari正在尝试将用户提供的URI转换为符合其有效URI概念的链接,这似乎是合理的.在这种情况下,Firefox不进行转换.

我想说明行为上的差异.

http://www.ecma-international.org/publications/standards/Ecma-262.htm上的文件是对有效URI所采用形式的一种引用.在第15.1.3.1节中,它说明了浏览器对URI的转义.

字符"#"不是从转义序列解码的,即使它不是保留的URI字符.

这可以说是它在整个URI字符串中引用#符号,而不仅仅是第一次出现.

总之,我的问题是:

  • 这两种形式的链接是否符合有效URI的最新标准?
  • 如果它们都有效,哪种浏览器行为最合适?

Chr*_*zig 2

RfC 3986(URI 的定义以及 URL 的外观以及各个部分的含义)不允许#在一个 URL 中出现两个字符,至少在我看来是这样。这使得问题归结为:

  • 将用户错误转发到 Web 应用程序是否更好(设计者可能犯了同样的错误),
  • 还是将用户输入转换为密切相关但有效的内容更好?

另请注意,RfC 明确将其列为#保留字符,因此 ECMA 标准在您上面引用的内容中是错误的。