您的位置:首页 > 其它

(原)IE6-含奇数个中文的字符串传参后最后一个中文字乱码的一个解决方案

2013-01-18 15:33 239 查看
这应该算是IE的一个bug,IE7及之后已经修复了。

网上找了找,有些方案还是无法解决,最后用了一个在奇数个中文后补全角空格的方法顺利解决,现总结如下:

前端是JSP+JS,在页面的JS区域增加一个函数,作用是将获取的用于传参的字符串进行处理,若字符串里含有奇数个中文,则在字符串后补一个全角空格!代码如下:

//codebylcq解决IE6对参数中包含奇数个汉字的传递乱码问题
functionmarch(str){
if(str.replace(/[^\u4e00-\u9fa5]/gi,"").length%2!=0)//字符串str内含有奇数个汉字
{//char转换成string字符串类型
str+=String.fromCharCode(12288);//12288为全角空格的unicode编码
}returnstr;
}


在action传参位置,对可能包含中文的参数这样写:





之后,在Action类里进行去除全角空格的操作,用以取消对实际数据的影响:


StringcAgencyBank=request.getParameter("cAgencyBank").replaceFirst(" ","").trim();


效果:




这样应该就可以了。

附:将上面处理字符串的JS代码转换成java版的:


publicclassChinese{
publicstaticvoidmain(String[]args){
Strings="你好啊aa!@#你";
System.out.println("("+march(s)+")");
}
publicstaticStringmarch(Stringstr){
char[]c=str.toCharArray();
intj=0;
for(inti=0;i<c.length;i++){
if(String.valueOf(c[i]).getBytes().length==2)j++;
}
if(j%2!=0)
{
str+=String.valueOf((char)12288);//拼接一个全角空格,使汉字数加一
}
returnstr;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: