我正在尝试将用户输入存储在客户端(javascript)的 XML 文档中,并将其传输到服务器以进行持久性。
例如,一位用户粘贴了包含 STX 字符 (0x2) 的文本。XMLSerializer 没有转义 STX 字符,因此没有序列化为格式良好的 XML。或者也许 .attr() 调用应该已经转义了 STX 字符,但是在任何一种情况下,都会产生无效的 XML。
我发现浏览器内 XMLSerializer() 的输出并不总是格式正确,(甚至不满足浏览器自己的 DOMParser()
此示例显示 XMLSerializer() 未正确编码 STX 字符:
> doc = $.parseXML('<?xml version="1.0" encoding="utf-8" ?>\n<elem></elem>');
#document
> $(doc).find("elem").attr("someattr", String.fromCharCode(0x2));
[ <elem someattr=""></elem> ]
> serializedDoc = new XMLSerializer().serializeToString(doc);
"<?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>"
> $.parseXML(serializedDoc);
Error: Invalid XML: <?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>
我应该如何在浏览器中构造一个 XML 文档(参数由任意用户输入确定),以便它始终格式正确(所有内容都正确转义)?我不需要支持 IE8 或 IE7。
(是的,我确实在服务器端验证了 XML,但是如果浏览器将一个格式不正确的文档交给服务器,那么服务器可以做的最好的事情就是拒绝它,这对可怜的用户没有多大帮助)