Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确编码的字符串在推入window.location.hash时被解码_Javascript_Jquery_Firefox_Hashchange - Fatal编程技术网

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的奇怪行为!谢谢,你解决了我的问题。