在 Firefox 4.0.1 中将以下内容粘贴到地址栏
http://www.w3.org/#one#two
请注意,浏览器导航到 w3.org 的首页,地址栏仍然显示
http://www.w3.org/#one#two
在 Safari 5.0.4 中执行相同的操作。注意浏览器也导航,但是地址栏文本被修改为阅读
http://www.w3.org/#one%23two
请注意,字符串中 hash 的第一个 hash 外观没有改变,但第二个被修改为编码形式(又名“转义”)%23。
假设 Safari 正在尝试将用户提供的 URI 转换为符合其有效 URI 想法的链接似乎是合理的。在这种情况下,Firefox 不会进行转换。
我想解释行为上的差异。
文档位于 http://www.ecma-international.org/publications/standards/Ecma-262.htm是对有效 URI 采用何种形式的引用。在第 15.1.3.1 节中,它陈述了以下关于浏览器对 URI 的转义的内容。
The character “#” is not decoded from escape sequences even though it is not a reserved URI character.
这可能意味着它指的是整个 URI 字符串中的 # 符号,而不仅仅是第一次出现。
总而言之,我的问题是:
- 这两种形式的链接是否都符合有效 URI 的最新标准?
- 如果它们都有效,哪种浏览器行为最合适?
最佳答案
RfC 3986 (URI 和 URL 的定义以及各部分的含义)不允许在一个 URL 中使用两个 #
字符,至少在我看来是这样。这使得问题归结为:
- 将用户错误转发给 Web 应用程序(设计者可能犯了同样的错误)是否更好,
- 还是将用户输入转换为密切相关但有效的内容更好?
另请注意,RfC 明确将 #
列为保留字符,因此 ECMA 标准在您上面引用的内容中是错误的。
关于http - 如何解释 Firefox 和 Safari 对用户提供的包含多个 # 符号的 URI 的不同处理方式?哪个是 'right' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897002/