加编号的URL中的加号(+)

时间:2015-07-28 07:52:27

标签: jquery xml url flask

在网络应用中,我发送XML文件的内容作为网址参数的一部分(可能不是最好的设计,但现在我仍然坚持使用它)。所以地址如下:

http://localhost:5000/fill?xml=XXXXXXXXXXXXX

是使用Flask的url_for('url', xml=xml)生成的。

我在客户端这样做:

  var img = document.getElementById('preview');
  var xmlstr = decodeURIComponent(GetURLParameter("xml"));
  var xml = $.parseXML(xmlstr);

当然,XML文件的内容将被编码。但是文件中的所有空格都转换为加号+。当我使用$.parseXML()函数对其进行解码时,+仍然存在。

为什么?

4 个答案:

答案 0 :(得分:1)

是的,当您将数据放入查询字符串时,它是 URL编码;将空格转换为+是正常的;查询参数使用application/x-www-form-urlencoded form进行编码。

decodeURIComponent()没有处理这一个差异;只需使用.replace()首先用空格替换+个字符:

var xmlstr = decodeURIComponent(GetURLParameter("xml").replace(/\+/g, " "));

请参阅How can I get query string values in JavaScript?

答案 1 :(得分:1)

警告任何想要在 URL 中编码大量数据的人:大多数代理、网络服务器和某些浏览器对 URL 有长度限制,而且通常当超过该限制时,它们只会截断 URL。实际限制是 2000 个字符,这应该适用于所有内容。

答案 2 :(得分:0)

在2020年,我建议使用URLSearchParams的本机实现来处理此旧版编码问题。目前,基本上所有浏览器(除IE之外,通常都是IE)和NodeJS自v10(see here起)都支持它。

只需:

let myUrl = new URL("http://my.url.here?with=query&xml=...");
let xmlStr = (new URLSearchParams(myUrl.search)).get("xml");

所有编码和解码都为您处理。

在此处查看文档:{​​{3}}

答案 3 :(得分:-1)

我首先要为url编码XML:

http://localhost:5000/fill?xml=encodeURIComponent(XXXXXXXXXXXXX)

,另一方面在解析xml:

之前对其进行解码
decodeURIComponent()