2011-01-20 80 views
3

我正在構建一個Web服務。如何過濾出Java中的非法XML字符

有人將非法字符放入我們的數據庫。

現在,當我嘗試檢索這些字符串並通過web服務發送它們時,客戶端扼流圈。

我得到一個錯誤,如:

com.sun.xml.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException 
- with linked exception: 
[com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 18)) 

如何刪除在Java中這個角色?

+0

我正在尋找快速和骯髒。我可以使用像這樣的東西:stringName.replace('\ u0022','') – 2011-01-20 00:50:13

回答

3
/** 
* Function to strip control characters from a string. 
* Any character below a space will be stripped from the string. 
* @param iString the input string to be stripped. 
* @return a string containing the characters from iString minus any control characters. 
*/ 
public String stripControlChars(String iString) { 
    StringBuffer result = new StringBuffer(iString); 
    int idx = result.length(); 
    while (idx-- > 0) { 
     if (result.charAt(idx) < 0x20 && result.charAt(idx) != 0x9 && 
       result.charAt(idx) != 0xA && result.charAt(idx) != 0xD) { 
      if (log.isDebugEnabled()) { 
       log.debug("deleted character at: "+idx); 
      } 
      result.deleteCharAt(idx); 
     } 
    } 
    return result.toString(); 
} 
3

檢查了這一點:

stringName.replaceAll("[^\\p{Print}]", ""); 

就像一個魅力。