(原)IE6-含奇数个中文的字符串传参后最后一个中文字乱码的一个解决方案
2013-01-18 15:33
239 查看
这应该算是IE的一个bug,IE7及之后已经修复了。
网上找了找,有些方案还是无法解决,最后用了一个在奇数个中文后补全角空格的方法顺利解决,现总结如下:
前端是JSP+JS,在页面的JS区域增加一个函数,作用是将获取的用于传参的字符串进行处理,若字符串里含有奇数个中文,则在字符串后补一个全角空格!代码如下:
在action传参位置,对可能包含中文的参数这样写:
网上找了找,有些方案还是无法解决,最后用了一个在奇数个中文后补全角空格的方法顺利解决,现总结如下:
前端是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; } }
相关文章推荐
- IE6下传参奇数中文乱码
- ie6 解决a标签奇数中文传参乱码问题
- c#或js url传参中文乱码解决方案
- asp.net 页面通过URL传参中文乱码的三种解决方案
- JSP页面传参出现中文乱码的解决方案
- URL上中文传参乱码解决方案
- SpringMVC使用@RequestBody后台返回前台中文字符串乱码的问题解决方案
- URL上中文传参乱码解决方案
- js跳转页面传参,参数值包含中文时显示乱码解决方案
- URL传参的中文乱码原因以及解决方案
- Qt显示中文ansi字符串乱码问题解决方案
- 中文乱码奇数个最后一个乱码偶数个不乱码
- Gsoap回传字符串中文乱码解决方案
- 一个奇葩的上传乱码问题。当上传路径汉字个数为奇数会时,最后一个字符乱码
- url 编码 中文|c# js url传参中文乱码解决方案
- url 编码 js url传参中文乱码解决方案
- Spring MVC 回复中文字符串乱码的解决方案
- url 编码 js url传参中文乱码解决方案
- 写一个函数, 2个参数, 1个字符串, 1个字节数,返回截取的字符串,要 求字符串中的中文不能出现乱码: 如 ( “ 我ABC”, 4) 应该截为 “ 我AB”,输入( “ 我 ABC汉DEF”, 6
- 再转一个 ajax中文乱码解决方案