编码window.location.hash
window.location.hash
是否包含url部分的编码或解码表示?
当我在Firefox 3.5和Internet Explorer 8中打开相同的URL( http://localhost/something/#%C3%BC
,其中%C3%BC
转换为ü
)时, document.location.hash
会得到不同的值:
- IE8:
#%C3%BC
- FF3.5:
#ü
有没有办法在两个浏览器中获得一个变体?
不幸的是,这是Firefox中的一个错误,因为它会在访问location.hash
时解码额外的时间。 例如,在Firefox中试试这个:
location.hash = "#%30"; location.hash === "#0"; // This is wrong, it should be "#%30"
唯一的跨浏览器的解决scheme是使用(location.href.split("#")[1] || "")
来获得散列。 使用location.hash
设置哈希似乎对所有支持location.hash
浏览器都能正常工作。
回答我自己的问题,我目前的解决scheme是parsingwindow.location.href
而不是使用window.location.hash
,因为前者总是(即在每个浏览器中)url编码。 因此,所提出的decodeURIComponent
函数CMS总是可以安全地使用。 YUI也是这样,所以不可能是那个错
你可以使用decodeURIComponent
,它会在所有情况下返回#ü
:
decodeURIComponent('#%C3%BC'); // #ü decodeURIComponent('#ü'); // #ü
试试看。
实际上,在我的Firefox版本(Linux版本为3.5)中,如果在URL中input“#%C3%BC”作为哈希值,则URL本身实际上会以“#ü” 转换为unicode。 但是你似乎已经回答了你自己的问题 – 在Firefox中,浏览器在URL中转换实体转义码,而在IE中则不转换。
我的build议实际上是这样的:在URL中根本没有放置“#%C3%BC”,只需在散列和URL中使用完整的Unicode。 这是一个select吗? 它应该在任何现代浏览器工作正常。