linux系统服务器下jsp传参数乱码
在一次解决乱码问题中,发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题,escape,encodeURI,encodeURIComponent等都解决不了问题
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了问题
在EL表达式自定义扩展函数库中的加入
<function> <description>url字符编码</description> <name>encodeWord</name> <function-class>com.miri.boss.comm.util.ELFunction</function-class> <function-signature> java.lang.String encodeWord(java.lang.String) </function-signature> <example>${f:encodeWord('要编码的字符串')}</example> </function> <function> <description>url字符解码</description> <name>decodeWord</name> <function-class>com.miri.boss.comm.util.ELFunction</function-class> <function-signature> java.lang.String decodeWord(java.lang.String) </function-signature> <example>${f:decodeWord('要解码的字符串')}</example> </function>
ELFunction.java中写加解密方法
/** * 对字符串escape编码 * * @param word * @return */ public static String encodeWord(String word) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(word.length() * 6); for (i = 0; i < word.length(); i++) { j = word.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256) { tmp.append("%"); if (j < 16) tmp.append("0"); tmp.append(Integer.toString(j, 16)); } else { tmp.append("%u"); tmp.append(Integer.toString(j, 16)); } } return tmp.toString(); } /** * 对escape码进行unescape解码 * * @param word * @return */ public static String decodeWord(String word) { StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(word.length()); int lastPos = 0, pos = 0; char ch; while (lastPos < word.length()) { pos = word.indexOf("%", lastPos); if (pos == lastPos) { if (word.charAt(pos + 1) == 'u') { ch = (char) Integer.parseInt(word.substring(pos + 2, pos + 6), 16); tmp.append(ch); lastPos = pos + 6; } else { ch = (char) Integer.parseInt(word.substring(pos + 1, pos + 3), 16); tmp.append(ch); lastPos = pos + 3; } } else { if (pos == -1) { tmp.append(word.substring(lastPos)); lastPos = word.length(); } else { tmp.append(word.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); }
在jsp页面中引入
<%@ taglib prefix="ks" uri="http://www.miri.com/elfunction" %>
页面中对中文参数的加密(两次加密)
${ks:encodeWord(ks:encodeWord(programList.channelName))}
页面中对中文参数的解密
${ks:decodeWord(param.channelName)}
相关推荐
bluecarrot 2020-11-23
Attend 2020-11-17
ZHAICAN 2020-11-16
codedecode 2020-11-14
zhangbingb 2020-11-12
ykmail 2020-11-11
futurezone 2020-11-06
rikeyone 2020-11-04
橄榄 2020-11-04
WenCoo 2020-10-31
liuyuchen 2020-10-27
ROES 2020-10-24
Gexrior 2020-10-22
ZHAICAN 2020-10-20
风语者 2020-10-16
zhongguomin 2020-10-16
净无邪 2020-10-15