(请不要讲座这不是正确的方式来构建url等;这是遗留代码,我有更重要的事要做。我只是想知道浏览器认为它在做什么。
给定以下函数:
function redirectToSearch(baseURL) {
var searchString = document.getElementById("searchBox").value;
document.location = baseURL + "&searchString=" + searchString;
}
其中searchBox
元素是一个文本字段:如果您输入类似
{ a ^ b } " c | d "
并调用此函数,则重定向到的结果URL以
结尾。searchString={%20a%20^%20b%20}%20%22c%20|%20d%22
——空格和引号被转义,但没有其他内容,即使{
、}
和|
也应该是无效字符。这在Chrome、Firefox和IE中似乎都是正确的。
好吧,大概我可以通过自己编码字符串来修复这个问题,但我想知道的是,为什么只有空格和引号(可能还有其他我没有发现的字符)?为什么不是所有无效字符,或者没有无效字符?
这是因为它们可能是URL本身的特殊字符,而空格和您提到的其他项在URL中没有特殊意义。因为它知道你正在设置一个URL(假设location
是一个URL),然后它把它变成一个URL的最好方式,它可以。
当然,您可以使用encodeURIComponent
来解决这个问题。
你得到一个错误吗?你不应该。浏览器的行为不同,会为您做一些编码,以使其更容易阅读。但是,正如您已经注意到的,您应该使用encodeURIComponent()
单独编码每个组件(名称和值)…仅仅因为浏览器试图修复你的错误并不意味着你应该让他们…