Safari中url中的特殊字符

Safari中url中的特殊字符,safari,uri,special-characters,Safari,Uri,Special Characters,我们在web应用程序中使用了一些特殊字符,如:example.com/foo#ofааП 我们使用decodeURI(window.location.hash)(有时哈希包含未编码的特殊字符)解析哈希,并设置新值,如window.location.hash=“ааП” 在Chrome、Firefox、Opera甚至IE中,一切都很好,但在Safari中,我们得到的是20?,而不是cfаП 如果在Safari中设置hash,比如window.location.hash=encodeURI(“ааП

我们在web应用程序中使用了一些特殊字符,如:
example.com/foo#ofааП

我们使用
decodeURI(window.location.hash)
(有时哈希包含未编码的特殊字符)解析哈希,并设置新值,如
window.location.hash=“ааП”

在Chrome、Firefox、Opera甚至IE中,一切都很好,但在Safari中,我们得到的是
20?
,而不是
cfаП


如果在Safari中设置hash,比如
window.location.hash=encodeURI(“ааП”)它可以工作,但当然在Chrome、FF和其他浏览器中不起作用。

我终于找到了解决方案。 如果通过
window.location.href
设置哈希,一切正常

代码如下:

var newHash = ...
var sharpIdx = window.location.href.indexOf("#");
if (sharpIdx === -1) {
  window.location.href = window.location.href + "#" + newHash;
} else {
  window.location.href = window.location.href.substr(0, sharpIdx) + "#" + newHash;
}

我也面临同样的问题,找到了另一个解决办法

window.location.hash = path;
// For safari url change fix
if (window.location.hash !== path) {
    window.location.hash = encodeURI(path);
}

因此,不仅访问
location.href
读取片段比读取
location.hash
更可靠(因为Mozilla处理读取
location.hash
错误),而且由于Safari的缘故,向其写入哈希更新更可靠。很高兴知道。这是一个更容易编码的解决方案,而不是在将代码分配到
位置之前,将代码固定在正确的位置调用
encodeURIComponent()
。散列
…我在iOS-6.1.6(iPod)和iOS-7.1.1(iPad)上的Mobile Safari中也看到了同样的异常行为。