当前端向后端传递的参数含非法字符时(tomcat由于版本升级,考虑安全性,将一些字符判定为非法字符,当然可以通过降低tomcat版本,或者增添配置来更改,但是这些都不是好的方法),可采用前端base64编码后再传向后端,后端再解码即可,毕竟编码后这些特定字符就像被转化为二进制一样,可以随意传输了。
前端代码:
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
在前端js中调用该函数,将返回值传向后端
后端解码:
String jsonObject = request.getParameter("jsonObject");
BASE64Decoder str=new BASE64Decoder();
String base64json=new String(str.decodeBuffer(jsonObject),"UTF-8");
后端首先接收前端传来的jsonObject,然后解码。我这里使用的是sun.misc包下的BASE64Decoder。