如何在Java中将不安全的字符转换为XML的安全字符?

时间:2010-02-08 09:18:25

标签: java xml escaping

我的文字中有芬兰字符(例如ä,ö和å)在XML中不安全,是否有用于此目的的库/框架?

3 个答案:

答案 0 :(得分:3)

XML支持Unicode,因此您真正需要逃脱的只有五个基本XML实体(gt,lt,quot,amp,apos)。如果你使用StringEscapeUtils.escapeXML,它会把你所有的ä,ö和å变成丑陋的\ uabcd东西。

答案 1 :(得分:2)

因此,对于xml的ecsape字符串,最好的方法是StringEscapeUtils.escapeXML 来自Commons Lang,但正如这里的某人已经说过这还不够 例如。如果想要拥有有效的xml,则应该从字符串中删除一些不可打印的控制字符。 为此,我使用此代码段:

/**
 * 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();
}

// Then 
String s = org.apache.commons.lang3.StringEscapeUtils.escapeXml(stripControlChars(s));

同样重要的是使用StringEscapeUtils.escapeXML Commons Lang版本3作为该方法的先前版本,其中需要更多地转义。

答案 2 :(得分:1)

来自StringEscapeUtils

Commons Lang采用了escapeXML方法,可以满足您的需求。