window.location.hash
には、URL部分のエンコードまたはデコードされた表現が含まれていますか?
Firefox3.5とInternetExplorer 8で同じURL(http://localhost/something/#%C3%BC
ここで%C3%BC
はü
に変換されます)を開くと、document.location.hash
の値が異なります。
#%C3%BC
#ü
両方のブラウザで1つのバリアントを取得する方法はありますか?
残念ながら、これは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
をサポートするすべてのブラウザで正しく機能するようです。
私自身の質問に答えると、私の現在の解決策は、window.location.href
を使用する代わりにwindow.location.hash
を解析することです。これは、前者が常に(つまり、すべてのブラウザーで)URLエンコードされているためです。したがって、提案されたdecodeURIComponent
関数[〜#〜] cms [〜#〜]は常に安全に使用できます。 [〜#〜] yui [〜#〜]同じことをするので、それは間違いではありません...
decodeURIComponent
を使用できます。すべての場合に#ü
が返されます。
decodeURIComponent('#%C3%BC'); // #ü
decodeURIComponent('#ü'); // #ü
試してみてください ここ 。
実際、私のバージョンのFirefox(Linuxでは3.5)では、URLにハッシュとして「#%C3%BC」と入力すると、URL自体が実際にtransforms「#ü」でユニコードになります。しかし、あなたはあなた自身の質問に答えているように見えます-Firefoxでは、ブラウザはURLのエンティティエスケープコードを変換しますが、IEでは変換しません。
私のアドバイスは実際にはこれです:URLに「#%C3%BC」を入れる代わりに、ハッシュとURLに完全なUnicodeを使用するだけです。それはオプションですか?最新のブラウザでは問題なく動作するはずです。