我的网络应用程序中有一个输入框,如果我键入以下输入:
charʃƪ
在服务器端,当我尝试使用Jdom构建一个xml文档时,崩溃会引发以下异常:
org.jdom.IllegalDataException:数据“char(3A”对于JDOM属性不合法:0x1a不是合法的XML字符。
at org.jdom.Attribute.setValue(Attribute.java:491)
at org.jdom.Attribute.<init>(Attribute.java:228)
at org.jdom.Attribute.<init>(Attribute.java:251)
at org.jdom.Element.setAttribute(Element.java:1128)
这是浏览器如何编码ajax调用 ...的&安培; MESSAGE =炭20%(3%1AA
我在服务器端的 pRequest.getParameter( “MESSAGE”); 它回报我:“ char(3A ”
有什么想法吗?
答案 0 :(得分:1)
现在正在运作。
我从jQuery插件URLEncode切换到本机javascript函数:
encodeURIComponent()
此外我发现在ajax调用中你可以指定contentType
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
答案 1 :(得分:0)
XML 1.0规范不允许使用字符0x1a。 不是一个unicode字符
http://www.w3.org/TR/2008/PER-xml-20080205/#charsets
XML 1.1规范 允许0x1a字符,我看到:http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-Char
但有三件事:
无论上述情况如何,我怀疑您在输入框和JDOM setAttribute(...)调用之间的代码中存在问题。这些地方之间有什么东西可以改变字符编码,序列化或以其他方式改变输入值吗?我怀疑在调用JDOM之前还有其他一些问题正在改变数据,因为你不太可能真的试图将char 0x1a加载为XML字符。
答案 2 :(得分:0)
正如@rolfl所怀疑的那样,浏览器中有些东西非常受欢迎。你在用什么?
如果我们做一点点Unicode和编码侦探工作,我们可以得到一个可能发生的事情的提示。
假设您正在尝试输入这些字符:
我们可以看到浏览器编码源于这两个字符的unicode代码点:
你使用的是一些ajax javascript库吗?也许是时候换了?