在网络应用中,我发送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()
函数对其进行解码时,+
仍然存在。
为什么?
答案 0 :(得分:1)
是的,当您将数据放入查询字符串时,它是 URL编码;将空格转换为+
是正常的;查询参数使用application/x-www-form-urlencoded
form进行编码。
decodeURIComponent()
没有处理这一个差异;只需使用.replace()
首先用空格替换+
个字符:
var xmlstr = decodeURIComponent(GetURLParameter("xml").replace(/\+/g, " "));
答案 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()