最近有用到一个字符串处理类StringEscapeUtils,来自于apache工具包common-lang中,,这个类能很方便的进行html,xml,java等的转义与反转义;
- 引入依赖:
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
这个版本还有sql转义防注入攻击的功能,在3.0版本后好像没有了就;
StringEscapeUtils中都是静态方法,方便调用;主要方法如下图;
如图所示,此类可以处理
CSV,HTML,XML,SQL,JAVA 等类型的字符串
如:
- 处理html中的特殊字符;
String html = "<div><br /> <p>tag&p</p> > </div>";
System.out.println(StringEscapeUtils.escapeHtml(html)); //转义
String uhtml = StringEscapeUtils.unescapeHtml(html); //反转义
其他处理方式类似;
需要注意的是,在进行反转义的时候,若字符串没有待转的字符,那么不会对字符串进行任何处理
以下代码实现了,
将html的空格符号替换为空字符的功能;
防sql注入漏洞的
编译java代码字符串;
import org.apache.commons.lang.StringEscapeUtils;
public class TestStingUnspace {
public static void main(String[] args) {
String html = "<div><br /> <p>tag&p</p> > </div>";
//System.out.println(html.replaceAll(" ","<p> </p>"));
System.out.println(html);
System.out.println(StringEscapeUtils.escapeHtml(html));
String uhtml = StringEscapeUtils.unescapeHtml(html);
System.out.println(uhtml);
String ujava = StringEscapeUtils.unescapeJava(uhtml);
System.out.println(ujava);
String result = CharMatcher.whitespace().replaceFrom(ujava," ");
System.out.println(result);
System.out.println(StringEscapeUtils.escapeJava(" System.out.println(\"测试\")//这是注释"));
System.out.println(StringEscapeUtils.escapeSql("select * from ta where id = 1 or '1=1'"));
}
}