Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 设置document.location时,浏览器会转义一些URL无效字符,但不会转义其他字符_Javascript_Internet Explorer_Firefox_Google Chrome - Fatal编程技术网

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

Javascript 设置document.location时,浏览器会转义一些URL无效字符,但不会转义其他字符,javascript,internet-explorer,firefox,google-chrome,Javascript,Internet Explorer,Firefox,Google Chrome,(请不要讲这不是构建URL的正确方法等;这是遗留代码,我还有更重要的事情要做。我只想知道浏览器认为它在做什么。) 鉴于以下功能: function redirectToSearch(baseURL) { var searchString = document.getElementById("searchBox").value; document.location = baseURL + "&searchString=" + searchString; } 其中,sear

(请不要讲这不是构建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(假定
位置
是一个URL),所以它会以最佳方式将其转换为URL


当然,您可以使用。

解决这个问题,因为它们可能是URL本身中的特殊字符,而您提到的空格和其他项目在URL中没有特殊意义。因为它知道您正在设置一个URL(假定
位置
是一个URL),所以它会以最佳方式将其转换为URL


当然,您可以使用解决此问题。

是否有错误?你不应该。浏览器的行为有所不同,并为您进行一些编码,以使其更易于阅读。但是,正如您已经指出的,您应该使用
encodeURIComponent()
单独编码每个组件(名称和值)。。。仅仅因为浏览器试图修复您的错误并不意味着您应该犯错误…

您是否收到错误?你不应该。浏览器的行为有所不同,并为您进行一些编码,以使其更易于阅读。但是,正如您已经指出的,您应该使用
encodeURIComponent()
单独编码每个组件(名称和值)。。。仅仅因为浏览器试图修复您的错误并不意味着您应该犯错误…

不是您问题的答案,您可能已经知道,但您正在寻找的功能不是您问题的答案,您可能已经知道,但您正在寻找的功能我不确定我是否同意:也不是
{}
|
都是@Pekka:我知道-但我想浏览器(即它的程序员)并不认为它能安全地逃脱这些攻击。也许你有一些特殊的URL要求。但URL句点中不允许使用空格。根据RFC3986,“URI是由一组有限的字符组成的,这些字符由数字、字母和一些图形符号组成。”这组字符不包括空格或引号,但也不包括插入符号、花括号或管道。我不确定我是否同意:也不包括
{
|
都是@Pekka:我知道-但我想浏览器(即它的程序员)并不认为它能安全地逃脱这些攻击。也许你有一些特殊的URL要求。但URL句点中不允许使用空格。根据RFC3986,“URI是由一组有限的字符组成的,这些字符由数字、字母和一些图形符号组成。”这组字符不包括空格或引号,但也不包括插入符号、花括号或管道。但这并不能真正回答问题。为什么某些类型的字符被编码,而另一些类型的字符没有编码,尽管它们不是真的,这并不能回答这个问题。但要找出浏览器为什么这么做除了好玩之外没有意义。如果你自己编码,你永远不会有问题。我不会在浏览器中看到错误。稍后,当这个请求在我的服务器上结束时,我遇到了一个错误,我尝试用更符合标准的代码(java.net.URI类)解析该请求。当然,我的回答的重点是,如果正确地编码它,就不会遇到这种问题。但这并不能真正回答问题。为什么某些类型的字符被编码,而另一些类型的字符没有编码,尽管它们不是真的,这并不能回答这个问题。但要找出浏览器为什么这么做除了好玩之外没有意义。如果你自己编码,你永远不会有问题。我不会在浏览器中看到错误。稍后,当这个请求在我的服务器上结束时,我遇到了一个错误,我尝试用更符合标准的代码(java.net.URI类)解析该请求。当然,我的回答的要点是,如果您正确地编码它,您将不会遇到这种问题。