(原)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();

 

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

 

 

转载于:https://www.cnblogs.com/mmmn/archive/2013/01/18/2866496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值