Javascript XMLHttpRequest在编码之前从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参数 您可以通过

在Windows Chrome 38(可能还有其他浏览器)中,XMLHttpRequest似乎会自动对URL进行编码,但它会首先去掉尾随空格:

在控制台中运行该代码将提供:

获取404(未找到)

尾部空间已被剥离,然后URL已编码

  • 这种行为记录在哪里?
  • 我希望它对尾随空格进行编码而不剥离它

  • 调用XHR.open()之前,我应该自己对URL进行编码吗?
  • 在中名为“基本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(…));