============================================================================String特殊字符工具类:
public class StringEscapeUtil { /** * HTML字符转义 * @see 对输入参数中的敏感字符进行过滤替换,防止用户利用JavaScript等方式输入恶意代码 * @see String input = <img src='http://t1.baidu.com/it/fm=0&gp=0.jpg'/> * @see HtmlUtils.htmlEscape(input); //from spring.jar * @see StringEscapeUtils.escapeHtml(input); //from commons-lang.jar * @see 尽管Spring和Apache都提供了字符转义的方法,但Apache的StringEscapeUtils功能要更强大一些 * @see StringEscapeUtils提供了对HTML,Java,JavaScript,SQL,XML等字符的转义和反转义 * @see 但二者在转义HTML字符时,都不会对单引号和空格进行转义,而本方法则提供了对它们的转义 * @return String 过滤后的字符串 */ public static String htmlEscape(String input) { if(StringCheckUtil.isEmpty(input)){ return input; } input = input.replaceAll("&", "&"); input = input.replaceAll("<", "<"); input = input.replaceAll(">", ">"); input = input.replaceAll(" ", " "); input = input.replaceAll("'", "'"); //IE暂不支持单引号的实体名称,而支持单引号的实体编号,故单引号转义成实体编号,其它字符转义成实体名称 input = input.replaceAll("\"", """); //双引号也需要转义,所以加一个斜线对其进行转义 input = input.replaceAll("\n", "<br/>"); //不能把\n的过滤放在前面,因为还要对<和>过滤,这样就会导致<br/>失效了 return input; } public static String unHtmlEscape(String input) { if(StringCheckUtil.isEmpty(input)){ return input; } input = input.replaceAll("&", "&"); input = input.replaceAll("<", "<"); input = input.replaceAll(">", ">"); input = input.replaceAll(" ", " "); input = input.replaceAll("'", "'"); //IE暂不支持单引号的实体名称,而支持单引号的实体编号,故单引号转义成实体编号,其它字符转义成实体名称 input = input.replaceAll(""", "\""); //双引号也需要转义,所以加一个斜线对其进行转义 input = input.replaceAll("<br/>", "\n"); //不能把\n的过滤放在前面,因为还要对<和>过滤,这样就会导致<br/>失效了 return input; } }
============================================================================String特殊字符工具测试类:
/** * html转义 */ @Test public void test_htmlEscape() { String input = "<a href='index.html'>主页<a>"; String htmlEscape = StringEscapeUtil.htmlEscape(input); System.out.println(htmlEscape); String unHtmlEscape = StringEscapeUtil.unHtmlEscape(htmlEscape); System.out.println(unHtmlEscape); }