java web 中文乱码

开发过程中,中文乱码的问题,一直都是一个老生常谈的问题困扰这开发人员。

1. 通过后台解决

public String youMethodName(HttpServletRequest req,...){
    String yourParam = req.getParameter("paramName");
    Matcher m = Pattern.compile("[u4e00-u9fa5]").matcher(yourParam);  
                //如果没有发现中文,说明使用get方式传递了中文,需要使用下面的方法转换  
                if (!m.find()) {  
                    programaName = this.tools.decodeUTF8FromIso88591(programaName);
                }  
    public String decodeUTF8FromIso88591(String paramStr) {
            if (null == paramStr || paramStr.length() <= 0) {
                return null;
            }
            try {
                byte[] bytes = paramStr.getBytes("iso-8859-1");
                paramStr = new String(bytes, "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return paramStr;
        }
}

一般情况我们是可以通过上面的方法解决中文的乱码问题,但也有特殊情况


2. 通过前台传递时解决

将请求参数经过URI编码在传给后台.防止了乱码;

var param = encodeURIComponent("yourParam");

当再需要使用的时候在通过对应的解码对其解码展示;

String param = encodeURIComponent(req.getParameter(param));

如果将转码过后的值作为数据存储到数据库中,这样同时可以防止数据库的SQL注入;

encodeURIComponent() URI编码

是将字符串 经过URI编码,避免get方式到后台乱码

name=中文字符

传到后台会根据浏览器不同有不同处理

tomcat server.xml中设置了编码 接收到的值也不一样

URI编码不能过滤非法字符

可以直接按F12在Console下面输入代码

console.log(encodeURIComponent("!@#$%^&"));
!%40%23%24%25%5E%26

所以如果这里面有非法字符比如 &%¥# 这些 经过encodeURIComponent 也都传到后台了

原文地址:https://www.cnblogs.com/lvgo/p/13275880.html