Javascript XMLHttpRequest在编码之前从URL中去除尾随空格
在Windows Chrome 38(可能还有其他浏览器)中,XMLHttpRequest似乎会自动对URL进行编码,但它会首先去掉尾随空格: 在控制台中运行该代码将提供: 获取404(未找到) 尾部空间已被剥离,然后URL已编码Javascript XMLHttpRequest在编码之前从URL中去除尾随空格,javascript,xmlhttprequest,url-encoding,Javascript,Xmlhttprequest,Url Encoding,在Windows Chrome 38(可能还有其他浏览器)中,XMLHttpRequest似乎会自动对URL进行编码,但它会首先去掉尾随空格: 在控制台中运行该代码将提供: 获取404(未找到) 尾部空间已被剥离,然后URL已编码 这种行为记录在哪里? 我希望它对尾随空格进行编码而不剥离它 调用XHR.open()之前,我应该自己对URL进行编码吗? 在中名为“基本URL解析器”的部分下,您可以看到一个关于删除前导和尾随空格的引用。此处引用了该文档,其中描述了open()的url参数 您可以通过
open()
的url参数
您可以通过在调用open()
之前自己编码URL来解决此问题,因为您提供给open()
的URL应该是合法的URL,而空格不是合法的URL字符。该编码还将负责删除前导和尾随空格(因为将不再有空格)
这种行为记录在哪里
使用解析其URL参数,在其第一步中,从输入中去除前导和尾随空格
在调用XHR.open()之前,我应该自己对URL进行编码吗
对。只需使用它:
还考虑从一开始就去掉这个无效的URL字符串,即在构造字符串之前。我不确定从何处获取参数值,但它可能看起来像
x.open('GET', 'http://example.com/a?b='+encodeURIComponent(…));
您可能应该自己对URL进行编码,因为您给XMLHttpRequest的内容应该是合法的URL,并且空格不是URL中的合法字符。
%20
是一个编码的空格。您是否尝试过?b=%20c%20d%20
在实际应用程序中,我会自己对其进行编码,但我仍然想知道为什么XMLHttpRequest似乎正在对URL进行编码。我猜这和浏览器在地址栏中键入空格时做的一样。所以你告诉我第一部分(修剪)记录在哪里,而第二部分(编码)记录在哪里。这是记录在案的还是波斯特定律在起作用?顺便说一句,参数来自用户输入(在输入字段中键入'cd')。encodeURIComponent()绝对是一个好方法。我在规范中找不到它。XHR只处理通过解析获得的URL对象,并将其(在send
方法中)传递给。为引用人构建的URL对象在此处显式序列化,但对于实际的ressource URL,我只能找到“当要获取URL时,URL标识要获取的资源”和“在用户和用户代理方便的时候下载(或以其他方式获取)资源,应用相关规范的语义”。
var x = new XMLHttpRequest();
x.open('GET', encodeURI('http://example.com/a?b= c d '));
x.send();
x.open('GET', 'http://example.com/a?b='+encodeURIComponent(…));