org.apache.commons.lang3.StringEscapeUtils.unescapeXml无法处理连续转义字符问题咨询
解决commons-lang3 StringEscapeUtils.unescapeXml无法处理双重转义XML字符的问题
你的字符串是双重XML转义的结果:&lt;本质是<经过两次转义得到的(第一次转<为<,第二次转&为&,最终变成&lt;)。而unescapeXml默认只执行一次反转义,所以只会把&转回&,得到<,没法直接得到<。
解决办法:
1. 直接调用两次unescapeXml
如果确定是双重转义,直接调用两次方法即可:
String error = "&lt;errors&gt;"; String out = org.apache.commons.lang3.StringEscapeUtils.unescapeXml(error); // 第二次调用完成剩余反转义 out = org.apache.commons.lang3.StringEscapeUtils.unescapeXml(out); System.out.println(out); // 输出:<errors>
2. 循环调用直到无转义字符可处理
如果不确定转义层数(可能是多重转义),可以循环调用,直到结果不再变化:
String error = "&lt;errors&gt;"; String out = org.apache.commons.lang3.StringEscapeUtils.unescapeXml(error); String prev; do { prev = out; out = org.apache.commons.lang3.StringEscapeUtils.unescapeXml(out); } while (!prev.equals(out)); System.out.println(out); // 输出:<errors>
3. 升级commons-lang3版本(可选)
如果可以升级依赖,将commons-lang3升级到3.10及以上版本,新版本的unescapeXml提供了重载方法支持更灵活的转义处理,但对于双重转义场景,上述两种方法已经足够解决问题。
内容的提问来源于stack exchange,提问作者ompratap
相关产品推荐
相关产品推荐

