【发布时间】:2011-04-26 23:31:49
【问题描述】:
我正在使用 document.location.hash 来保留页面上的状态,并且我将 url 编码的键值对放在那里,用“&”字符分隔。到目前为止,一切都很好。
但是,我在 Firefox 上遇到了一个烦人的问题——Firefox 会在输入的过程中悄悄地对哈希值进行 url 解码,因此当您稍后将其取出时,它已被解码。
我可以通过检测我何时在 firefox 上运行并在进入过程中两次对所有内容调用 encodeURIComponent 来解决问题,但显然这很可怕,我真的不想这样做.
这是一个简单的例子,我将“=”编码为“%3D”,将其放入哈希中,然后当我将其取出时,它会自动变回“=”:
// on the way in::
document.location.hash = "foo=" + encodeURIComponent("noisy=input");
//then later.....
// on the way out:
var hash = document.location.hash;
kvPair = hash.split("=");
if (kvPair.length==2) {
console.log("that is correct.")
} else if (kvPair.length==3) {
console.log("oh hai firefox, this is incorrect")
}
我很高兴,可能有一些隐藏的 DOM 元素是由 firefox 创建的,它代表了实际的(未解码的)哈希值?
但底线——有没有人遇到过这种情况并找到了比仅在 Firefox 上进行浏览器检测和两次调用 encodeURIComponent 更好的解决方案?
注意:我认为其他几个问题的根本原因相同。最值得注意的是这个:
【问题讨论】:
-
恐怕没有比 Firefox 中的不同程序更好的方法了,直到有一天他们修复了这个错误:bugzilla.mozilla.org/show_bug.cgi?id=483304。一个选项可能是使用字符串函数从 window.location 提取哈希。
标签: javascript url encoding