开发过程中,中文乱码的问题,一直都是一个老生常谈的问题困扰这开发人员。
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 也都传到后台了