window.location.hash 的编码
window.location.hash
是否包含 url 部分的编码或解码表示?
当我打开相同的网址时(http://localhost/something/#%C3%BC
,其中 %C3%BC
转换为 ü
)在 Firefox 3.5 和 Internet Explorer 8 中,我得到不同的 document.location.hash
值:
- IE8:
#%C3%BC
- FF3.5:
#ü< /code>
有没有办法在两种浏览器中获得一个变体?
Does window.location.hash
contain the encoded or decoded representation of the url part?
When I open the same url (http://localhost/something/#%C3%BC
where %C3%BC
translates to ü
) in Firefox 3.5 and Internet Explorer 8, I get different values for document.location.hash
:
- IE8:
#%C3%BC
- FF3.5:
#ü
Is there a way to get one variant in both browsers?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不幸的是,这是 Firefox 中的一个错误,因为它在访问时会额外解码
location.hash
。例如,在 Firefox 中尝试此操作:唯一的跨浏览器解决方案是仅使用
(location.href.split("#")[1] || "")
来获取哈希值。使用location.hash
设置哈希似乎对于所有支持location.hash
的浏览器都可以正常工作。Unfortunately, this is a bug in Firefox as it decodes
location.hash
an extra time when it is accessed. For example, try this in Firefox:The only cross-browser solution is to just use
(location.href.split("#")[1] || "")
instead for getting the hash. Setting the hash usinglocation.hash
seems to work correctly for all browsers that supportlocation.hash
though.回答我自己的问题,我当前的解决方案是解析
window.location.href
而不是使用window.location.hash
,因为前者总是(即在每个浏览器中) ) url 编码。因此,提出的decodeURIComponent
函数CMS始终可以安全使用。 YUI 也做了同样的事情,因此不可能是错的......Answering to my own question, my current solution is to parse
window.location.href
instead of usingwindow.location.hash
, because the former is always (i.e. in every browser) url-encoded. Therefore thedecodeURIComponent
function CMS proposed can always be used safely. YUI does the same, therefore it can't be that wrong...您可以使用
decodeURIComponent
,它将返回在所有情况下#ü
:在此处尝试一下。
You can use
decodeURIComponent
, it will return#ü
in all cases:Try it out here.
实际上,在我的 Firefox 版本(Linux 上为 3.5)中,如果我在 URL 中输入“#%C3%BC”作为哈希值,则 URL 本身实际上会转换为带有“#ü”的 unicode。但您似乎已经回答了您自己的问题 - 在 Firefox 中,浏览器会转换 URL 中的实体转义码,而在 IE 中则不会。
我的建议实际上是这样的:不要在 URL 中添加“#%C3%BC”,而只需在哈希值和 URL 中使用完整的 unicode。这是一个选择吗?它应该在任何现代浏览器中都能正常工作。
Actually in my version of Firefox (3.5 on Linux), if I type "#%C3%BC" as a hash in the URL, the URL itself actually transforms to unicode with "#ü". But you have appeared to answered your own question -- in Firefox, the browser transforms entity escape codes in the URL, while in IE, it does not.
My advice is actually this: Instead of putting "#%C3%BC" in the URL at all, just use full unicode in your hashes and URLs. Is that an option? It should work fine in any modern browser.