Javascript 正确编码的字符串在推入window.location.hash时被解码
目标:将Javascript 正确编码的字符串在推入window.location.hash时被解码,javascript,jquery,firefox,hashchange,Javascript,Jquery,Firefox,Hashchange,目标:将数据属性中的字符串正确放入窗口.location.hash 代码: map = {path: $(this).attr('data-path'), rev: $(this).attr('data-rev')}; window.location.hash = getMapParams(map); function getMapParams(map) { s=""; for(key in map) { value=eval("map."+key); if (s.le
数据
属性中的字符串正确放入窗口.location.hash
代码:
map = {path: $(this).attr('data-path'), rev: $(this).attr('data-rev')};
window.location.hash = getMapParams(map);
function getMapParams(map) {
s="";
for(key in map) {
value=eval("map."+key);
if (s.length > 0) {
s+="&";
}
s+=encodeURIComponent(key)+"="+encodeURIComponent(value);
}
return s;
}
问题:只要数据路径
属性包含空格,Firefox就无法正确放置哈希。空间将显示为未编码,而在其他浏览器中,它正确编码为%20
奇怪的怪癖:如果我调试代码,字符串将与编码的空格一起列出
所做的研究:我找到了很多正确读取firefox中散列的解决方案。在某种程度上,这与我的代码配合得很好
问题:如何阻止Firefox对我放入window.location.hash的字符串中的空格进行URL解码我通常会尽量避免使用
window.location.hash,因为它在不同的浏览器中并不统一
这样做,而不是遵循
window.location.hash = "some hash value";
我愿意
window.location.href = window.location.href.split("#")[0] + "#" + encodeURIComponent("some hash value");
此外,尽管Firefox在地址栏中显示已解码的哈希(即“而不是%20”),但如果您尝试复制地址,它实际上是编码的。因此,显示的内容不是URI中的内容
另外,我总是使用以下代码访问哈希
var hash_val = window.location.href.split("#")[1] || "";
理论上,firefox不处理散列中的空格是非常合乎逻辑的,因为它应该引用id=”“
并为您滚动页面。你不能用\uu
或者别的什么来代替吗?可能不是答案,试着用value=map[key];我可以用另一个字符替换所有空格,但它是一个前端,使用Dropbox api获取文件夹和文件。我必须修改很多代码。除此之外,在其他浏览器中,它运行良好。问题是,它不是一个空间。这是一个URL编码的空间。其他URL编码字符如/
(%2F
)保持原样..我想简单的解决方案是通过jQuery确定客户端是否为Firefox,并正确解码/编码/替换空间。我采用了上面Robin Castlin的解决方案。但只替换了javascript代码中的字符,所以我不必进入PHP后端。它现在可以正常工作了。我可能确实需要稍微重写一下,并使用location.href而不是replace。我真的不喜欢地址栏上的。奇怪的是,我随后从散列中构建的请求包含了空格,这就是为什么它破坏了我的代码。“此外,尽管Firefox在地址栏中显示解码的散列(即“而不是%20”),但如果你试图复制地址,它实际上是编码的”-这是Firefox的奇怪行为!谢谢,你解决了我的问题。