huanghongfa
2021-09-02 177249c76aeea0b4bf8d8816d4994e3b445b45ce
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/EscapeUtil.java
@@ -1,23 +1,18 @@
package com.panzhihua.common.utlis;
/**
 * 转义和反转义工具类
 * 
 * @author ruoyi
 */
public class EscapeUtil
{
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 };
    static {
        for (int i = 0; i < 64; i++) {
            TEXT[i] = new char[] {(char)i};
        }
        // special HTML characters
@@ -31,60 +26,55 @@
    /**
     * 转义文本中的HTML字符为安全的字符
     * 
     * @param text 被转义的文本
     * @param text
     *            被转义的文本
     * @return 转义后的文本
     */
    public static String escape(String text)
    {
    public static String escape(String text) {
        return encode(text);
    }
    /**
     * 还原被转义的HTML特殊字符
     * 
     * @param content 包含转义符的HTML内容
     * @param content
     *            包含转义符的HTML内容
     * @return 转换后的字符串
     */
    public static String unescape(String content)
    {
    public static String unescape(String content) {
        return decode(content);
    }
    /**
     * 清除所有HTML标签,但是不删除标签内的内容
     * 
     * @param content 文本
     * @param content
     *            文本
     * @return 清除标签后的文本
     */
    public static String clean(String content)
    {
    public static String clean(String content) {
        return new HTMLFilter().filter(content);
    }
    /**
     * Escape编码
     * 
     * @param text 被编码的文本
     * @param text
     *            被编码的文本
     * @return 编码后的字符
     */
    private static String encode(String text)
    {
    private static String encode(String text) {
        int len;
        if ((text == null) || ((len = text.length()) == 0))
        {
        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++)
        {
        for (int i = 0; i < len; i++) {
            c = text.charAt(i);
            if (c < 64)
            {
            if (c < 64) {
                buffer.append(TEXT[c]);
            }
            else
            {
            } else {
                buffer.append(c);
            }
        }
@@ -94,47 +84,36 @@
    /**
     * Escape解码
     * 
     * @param content 被转义的内容
     * @param content
     *            被转义的内容
     * @return 解码后的字符串
     */
    public static String decode(String content)
    {
        if (StringUtils.isEmpty(content))
        {
    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())
        {
        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);
            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);
                } else {
                    ch = (char)Integer.parseInt(content.substring(pos + 1, pos + 3), 16);
                    tmp.append(ch);
                    lastPos = pos + 3;
                }
            }
            else
            {
                if (pos == -1)
                {
            } else {
                if (pos == -1) {
                    tmp.append(content.substring(lastPos));
                    lastPos = content.length();
                }
                else
                {
                    tmp.append(content.substring(lastPos, pos));
                } else {
                    tmp.append(content, lastPos, pos);
                    lastPos = pos;
                }
            }
@@ -142,8 +121,7 @@
        return tmp.toString();
    }
    public static void main(String[] args)
    {
    public static void main(String[] args) {
        String html = "<script>alert(1);</script>";
        // String html = "<scr<script>ipt>alert(\"XSS\")</scr<script>ipt>";
        // String html = "<123";