2012-06-20 96 views
0

我有一個輸入框,在我的web應用程序,如果我鍵入以下內容輸入:IllegalDataException在解析特殊字符

焦炭ʃƪ

在服務器端,當我嘗試建立使用JDOM的XML文檔它崩潰提高了以下異常:

org.jdom.IllegalDataException:數據「字符(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調用 ...... &消息=焦炭20%(3%1AA

在服務器端,當我做 pRequest.getParameter( 「MESSAGE」) ; 它返回?我:「CHAR(3A

任何想法是怎麼回事有

回答

1

它現在正在工作。

我從jQuery切換插件URLEncode的原生javascript函數:

encodeURIComponent() 

而且我發現,在Ajax調用,您可以指定的contentType

contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
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的1.x(和2.x)將拒絕非XML1.0字符。
  • 即使在XML 1.1中,0x1a字符也是'Restricted'(我不是100%確定這意味着什麼,我正在調查)。
  • 你確定你使用「換人」字符(0X1A)

是不管上面,我懷疑你在輸入框和之間的代碼有問題JDOM setAttribute(...)調用。這些地方之間是否有改變字符編碼,序列化或以其他方式改變輸入值的東西?我會懷疑在調用JDOM之前還有一些其他問題正在改變數據,因爲你不太可能試圖將char 0x1a作爲XML字符加載。

0

正如@rolfl所懷疑的那樣,瀏覽器中有些東西是非常需要的。你在用什麼?

如果我們做一點Unicode和編碼偵探工作,我們可以得知可能發生什麼的提示。

假設你正在試圖進入這些字符:

  • ʃ,Unicode的U + 0283(小寫拉丁字母ESH)
  • ƪ,Unicode的U + 01AA(拉丁文字母顛倒ESH環)

我們可以看到瀏覽器編碼從Unicode代碼點所產生的這兩個漢字:

  • (,恰好是28的ASCII字符集
  • 3,剩餘的3
  • %1A,1A是不是一個合法的URL字符所以它被編碼
  • A,剩餘的甲

它是否使用了一些ajax javascript庫?也許時間轉換?