很多时候,由于特殊字符的原因,会造成用户输入的信息反馈到页面上时会显示成乱码,造成页面排版混乱;另外,黑客经常利用特殊字符对网站进行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="" onerror=""> 中的onerror就要过滤掉,不能在img标签中出现,单独的<img src="">这样可以;一般大型公司对链接里的触发事件会做一些过滤,比如一般你输入<a href="" onmouseover="">,就只剩下<a href="">。