(原)IE6-含奇数个中文的字符串传参后最后一个中文字乱码的一个解决方案
这应该算是IE的一个bug,IE7及之后已经修复了。
网上找了找,有些方案还是无法解决,最后用了一个在奇数个中文后补全角空格的方法顺利解决,现总结如下:
前端是JSP+JS,在页面的JS区域增加一个函数,作用是将获取的用于传参的字符串进行处理,若字符串里含有奇数个中文,则在字符串后补一个全角空格!代码如下:
//code by lcq 解决IE6对参数中包含奇数个汉字的传递乱码问题 function march(str){ if(str.replace(/[^\u4e00-\u9fa5]/gi,"").length%2!=0)//字符串str内含有奇数个汉字 { //char转换成string字符串类型 str+=String.fromCharCode(12288);//12288为全角空格的unicode编码 } return str; }
在action传参位置,对可能包含中文的参数这样写:
之后,在Action类里进行去除全角空格的操作,用以取消对实际数据的影响:
String cAgencyBank = request.getParameter("cAgencyBank").replaceFirst(" ", "").trim();
效果:
这样应该就可以了。
附:将上面处理字符串的JS代码转换成java版的:
public class Chinese { public static void main(String[] args){ String s="你好啊aa!@#你"; System.out.println("("+march(s)+")"); } public static String march(String str){ char[] c = str.toCharArray(); int j=0; for(int i=0;i<c.length;i++){ if(String.valueOf(c[i]).getBytes().length==2)j++; } if(j%2!=0) { str+=String.valueOf((char) 12288);//拼接一个全角空格,使汉字数加一 } return str; } }