同学的毕业设计出现JavaScript用encodeURIComponentt编码后无法再后台解码的问题。
原来他是这样写的:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(seartext);
java处理的代码为:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要处理异常*/
咋一看觉的没问题啊,一编一解的,应该可以了。但还是出现了乱码。
后来网搜资料,发现原来在对后台java程序里的searchtext赋值的时候,本身已经使用了一次解码,不过解码的结果依然不对。所以我们可以在页面上进行两次编码操作,这样后台自动的那次就可以抵消掉一次,然后在使用searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要处理异常*/进行一次解码就好了。
正确的代码:
JavaScript:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encodeURIComponent(seartext));
java:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要处理异常*/
另外还有一种方法是JavaScript进行一次编码,后台java处理时换种想法就好了:
java代码:
String s = new String(request.getParameter("name").getBytes("ISO8859-1"), "UTF-8");
//--------------------------------我使用的方法--------------------------------
JS编码:
var trmpStr = url+"?com=exportData"
+ "&dataAlias="+dataAlias
+ "&orgDm="+cboZz.getCode()
+ "&ksrq="+obj.ksrq
+ "&jzrq="+obj.jzrq
+ "&name="+encodeURIComponent(encodeURIComponent(txtMcInfo))
+ "&personCode="+personCode
+ "&queryStr="+encodeURIComponent(encodeURIComponent(queryStr));
JAVA解码:
String dataAlias = request.getParameter("dataAlias");//数据来源别名
String orgDm = request.getParameter("orgDm");//机构代码
String ksrq = request.getParameter("ksrq");//开始日期
String jzrq = request.getParameter("jzrq");//截止日期
String name = java.net.URLDecoder.decode(request.getParameter("name"),"UTF-8");//名称检索条件
Long personCode = null;//组员id
try{ personCode = Long.parseLong(request.getParameter("personCode"));}catch(Exception e){}
String queryStr = java.net.URLDecoder.decode(request.getParameter("queryStr"),"UTF-8");//名称检索条件