(原)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传参位置,对可能包含中文的参数这样写:

image

之后,在Action类里进行去除全角空格的操作,用以取消对实际数据的影响:
String cAgencyBank = request.getParameter("cAgencyBank").replaceFirst(" ", "").trim();

 

效果:
image
这样应该就可以了。
附:将上面处理字符串的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;
    }
}

 

 
posted @ 2013-01-18 15:33  Aigle  阅读(492)  评论(0编辑  收藏  举报