设置document.location时,浏览器会转义一些url无效字符,但不会转义其他字符

Browser escapes some URL-invalid characters but not others when setting document.location

本文关键字:字符 转义 document 无效 其他 url 浏览器 location 设置      更新时间:2023-09-26

(请不要讲座这不是正确的方式来构建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()单独编码每个组件(名称和值)…仅仅因为浏览器试图修复你的错误并不意味着你应该让他们…