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

4 篇文章 0 订阅

一、需求说明

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);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值