window.location.hash 的编码

发布于 2024-08-10 19:46:00 字数 377 浏览 6 评论 0原文

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%BCtranslates 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

网名女生简单气质 2024-08-17 19:46:00

不幸的是,这是 Firefox 中的一个错误,因为它在访问时会额外解码 location.hash 。例如,在 Firefox 中尝试此操作:

location.hash = "#%30";
location.hash === "#0"; // This is wrong, it should be "#%30"

唯一的跨浏览器解决方案是仅使用 (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:

location.hash = "#%30";
location.hash === "#0"; // This is wrong, it should be "#%30"

The only cross-browser solution is to just use (location.href.split("#")[1] || "") instead for getting the hash. Setting the hash using location.hash seems to work correctly for all browsers that support location.hash though.

安静 2024-08-17 19:46:00

回答我自己的问题,我当前的解决方案是解析 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 using window.location.hash, because the former is always (i.e. in every browser) url-encoded. Therefore the decodeURIComponent function CMS proposed can always be used safely. YUI does the same, therefore it can't be that wrong...

三生路 2024-08-17 19:46:00

您可以使用 decodeURIComponent,它将返回在所有情况下

decodeURIComponent('#%C3%BC'); // #ü
decodeURIComponent('#ü'); // #ü

此处尝试一下。

You can use decodeURIComponent, it will return in all cases:

decodeURIComponent('#%C3%BC'); // #ü
decodeURIComponent('#ü'); // #ü

Try it out here.

对岸观火 2024-08-17 19:46:00

实际上,在我的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文