很多时候,由于特殊字符的原因,会造成用户输入的信息反馈到页面上时会显示成乱码,造成页面排版混乱;另外,黑客经常利用特殊字符对网站进行xss跨站攻击,所以我们需要对页面上提交的特殊字符进行html转码。
spring提供了一个工具类,org.springframework.web.util.HtmlUtils,省去了我们写工具类对html中的特殊字符进行过滤的麻烦。以下是对该工具类的使用示例:
import org.springframework.web.util.HtmlUtils;
public class HtmpEscapeExample {
public static void main(String[] args) {
String specialStr = " #测试转义:#<table id=\"testid\"><tr>test1;test2</tr></table>";
// ①转换为HTML转义字符表示
String str1 = HtmlUtils.htmlEscape(specialStr);
System.out.println(str1);
// ②转换为数据转义表示
String str2 = HtmlUtils.htmlEscapeDecimal(specialStr);
System.out.println(str2);
//③转换为十六进制数据转义表示
String str3 = HtmlUtils.htmlEscapeHex(specialStr);
System.out.println(str3);
// ④下面对转义后字符串进行反向操作
System.out.println(HtmlUtils.htmlUnescape(str1));
System.out.println(HtmlUtils.htmlUnescape(str2));
System.out.println(HtmlUtils.htmlUnescape(str3));
}
}
另外,如果直接是用户输入的地方,可以直接过滤,但如果管理员用编辑器来编辑,就会有本来对应格式的HTML呗,这样的话,一般就过滤一些特殊标签,比如<script>,肯定是不能用的。还有就是一些触发事件选项,比如<img src="" οnerrοr=""> 中的onerror就要过滤掉,不能在img标签中出现,单独的<img src="">这样可以;一般大型公司对链接里的触发事件会做一些过滤,比如一般你输入<a href="" οnmοuseοver="">,就只剩下<a href="">。