java中将html特殊字符作转义和取消转义操作

一、需求说明

1.前端传来数据存入数据库,经过后台时要做转义处理

在用户填写数据时,有时会传入一些html特殊字符(如:商标符号©等),这时我们需要将前端传来的特殊字符先做转义操作,然后再存入数据库,否则数据库里特殊字符会变成问号,最终无法在页面上正常显示

2.从数据库查出数据,传到前端页面显示,经过后台时要做取消转义处理

二、代码实现

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.HtmlUtils;

import java.lang.reflect.Field;
import java.util.List;

/**
 * Created by shucheng on 2018-07-16 上午 0:11.
 * Html工具类
 **/
public class HtmlUtil {

    /**
     * 将list中包含对象的所有字符串属性取消转义
     * @param list
     * @param <T>
     * @return
     */
    public static <T> List<T> listHtmlUnEscape(List<T> list) {
        return listHtmlTextHandle(list, 0);
    }

    /**
     * 将list中包含对象的所有字符串属性添加转义
     * @param list
     * @param <T>
     * @return
     */
    public static <T> List<T> listHtmlEscape(List<T> list) {
        return listHtmlTextHandle(list, 1);
    }

    /**
     * 将对象中的所有字符串属性取消转义
     * @param t
     * @param <T>
     * @return
     */
    public static <T> T objectHtmlUnEscape(T t) {
        return objectHtmlTextHandle(t, 0);
    }

    /**
     * 将对象中的所有字符串属性添加转义
     * @param t
     * @param <T>
     * @return
     */
    public static <T> T objectHtmlEscape(T t) {
        return objectHtmlTextHandle(t, 1);
    }

    /**
     * list中的对象属性值批量html转义
     * @param list 需要做转义操作的list
     * @param option 0 取消转义 1 转义
     * @param <T>
     * @return
     */
    public static <T> List<T> listHtmlTextHandle(List<T> list, int option) {
        for (int i = 0; i < list.size(); i++) {
            T t = list.get(i);
            list.remove(i); // 先移除原有的对象
            t = 0 == option ? objectHtmlUnEscape(t) : objectHtmlEscape(t);
            list.add(i, t); // 再将取消转义后的对象添加到list对应位置
        }
        return list;
    }

    /**
     * 对象属性值批量html转义
     * @param t 需要做转义操作的对象
     * @param option 0 取消转义 1 转义
     * @param <T>
     * @return
     */
    public static <T> T objectHtmlTextHandle(T t, int option) {
        Class clazz = t.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            Class type = field.getType();
            if (type.equals(String.class)) {
                field.setAccessible(true);
                try {
                    String filedValue = (String) field.get(t);
                    // 进行取消转义(0),转义(1)操作
                    filedValue = 0 == option ? htmlUnescape(filedValue) : htmlEscape(filedValue);
                    field.set(t, filedValue);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return t;
    }

    /**
     * Spring的HtmlUtils进行转义
     */
    public static String htmlEscape(String str) {
        if (StringUtils.isBlank(str)) {
            return null;
        } else {
            return HtmlUtils.htmlEscape(str);
        }
    }

    /**
     * Spring的HtmlUtils进行还原
     */
    public static String htmlUnescape(String str) {
        if (StringUtils.isBlank(str)) {
            return null;
        } else {
            return HtmlUtils.htmlUnescape(str);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u010999809/article/details/81072321
今日推荐