在jsp页面传参到action中,如果参数含有中文,则在action中可能出现乱码。
将参数在页面编码两次:var param = encodeURI( encodeURI( param ) );
在再action中解码一次:String param= URLDecoder.decode(request.getParameter("param"),"UTF-8");
乱码问题就解决了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
但是这种情况是参数中没有包含“+”加号,当参数中有加号时,在页面编码两次,再在action中解码一次,打印此变量
发现加号被空格代替了。
那么我们需要在页面上将用“%2B”将“+”代替,再在action中用“+”代替“%2B”。
但是javascript只有replace,没有replaceAll,只能替换第一个“+”,如果要替换全部“+”,加上一个自定义的replaceAll方法就可以了。
JSP页面:
String.prototype.replaceAll = function(s1,s2){
return this.replace(new RegExp(s1,"gm"),s2);
}
var param= param.replaceAll("\\+","%2B");
java:
String param= URLDecoder.decode(request.getParameter("param"),"UTF-8").replaceAll("\\%2B", "+");
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------