HTML转义和反转义工具类
package com. common. utils ; import cn. hutool. http. HTMLFilter ;
import org. apache. commons. lang3. StringUtils ;
public class EscapeUtil { public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)" ; private static final char [ ] [ ] TEXT = new char [ 64 ] [ ] ; static { for ( int i = 0 ; i < 64 ; i++ ) { TEXT [ i] = new char [ ] { ( char ) i} ; } TEXT [ '\'' ] = "'" . toCharArray ( ) ; TEXT [ '"' ] = """ . toCharArray ( ) ; TEXT [ '&' ] = "&" . toCharArray ( ) ; TEXT [ '<' ] = "<" . toCharArray ( ) ; TEXT [ '>' ] = ">" . toCharArray ( ) ; } public static String escape ( String text) { return encode ( text) ; } public static String unescape ( String content) { return decode ( content) ; } public static String clean ( String content) { return new HTMLFilter ( ) . filter ( content) ; } private static String encode ( String text) { int len; if ( ( text == null ) || ( ( len = text. length ( ) ) == 0 ) ) { return StringUtils . EMPTY ; } StringBuilder buffer = new StringBuilder ( len + ( len >> 2 ) ) ; char c; for ( int i = 0 ; i < len; i++ ) { c = text. charAt ( i) ; if ( c < 64 ) { buffer. append ( TEXT [ c] ) ; } else { buffer. append ( c) ; } } return buffer. toString ( ) ; } public static String decode ( String content) { if ( StringUtils . isEmpty ( content) ) { return content; } StringBuilder tmp = new StringBuilder ( content. length ( ) ) ; int lastPos = 0 , pos = 0 ; char ch; while ( lastPos < content. length ( ) ) { pos = content. indexOf ( "%" , lastPos) ; if ( pos == lastPos) { if ( content. charAt ( pos + 1 ) == 'u' ) { ch = ( char ) Integer . parseInt ( content. substring ( pos + 2 , pos + 6 ) , 16 ) ; tmp. append ( ch) ; lastPos = pos + 6 ; } else { ch = ( char ) Integer . parseInt ( content. substring ( pos + 1 , pos + 3 ) , 16 ) ; tmp. append ( ch) ; lastPos = pos + 3 ; } } else { if ( pos == - 1 ) { tmp. append ( content. substring ( lastPos) ) ; lastPos = content. length ( ) ; } else { tmp. append ( content. substring ( lastPos, pos) ) ; lastPos = pos; } } } return tmp. toString ( ) ; } public static void main ( String [ ] args) { String html = "<script>alert(1);</script>" ; System . out. println ( EscapeUtil . clean ( html) ) ; System . out. println ( EscapeUtil . escape ( html) ) ; System . out. println ( EscapeUtil . unescape ( html) ) ; }
}