posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Ajax中文乱码解决方法

Posted on 2008-06-08 20:56 魔のkyo 阅读(460) 评论(0)  编辑 收藏 引用

 

我是在Sajax框架下用PHP开发的,方法是这样(这个方法很土,规避了本质问题,见文章底部PS),对服务端返回的数据在返回之前用urlencode进行编码,在客户端的JS接收到数据之后再用urldecode解码。urlencode,urldecode是PHP的内置函数,而JS却没有这两个函数,所以要自己写。
<script language="vbscript">
    
Function str2asc(strstr)
        str2asc 
= hex(asc(strstr))
    
End Function
    
Function asc2str(ascasc)
        asc2str 
= chr(ascasc)
    
End Function
</script>
<script language="javascript">
/*这里开始是UrlEncode和UrlDecode函数*/
    
function UrlEncode(str){
        
var ret="";
        
var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
        for(var i=0;i<str.length;i++){
           var chr = str.charAt(i);
            var c=str2asc(chr);
            //tt += chr+
":"+c+"n";
            if(parseInt(
"0x"+c) > 0x7f){
              ret+=
"%"+c.slice(0,2)+"%"+c.slice(-2);
            }else{
              if(chr==
" ")
                ret+=
"+";
              else if(strSpecial.indexOf(chr)!=-1)
                ret+=
"%"+c.toString(16);
              else
                ret+=chr;
            }
        }
        return ret;
    }

    function UrlDecode(str){
        var ret=
"";
        for(var i=0;i<str.length;i++){
           var chr = str.charAt(i);
            if(chr == 
"+"){
              ret+=
" ";
            }else if(chr==
"%"){
             var asc = str.substring(i+1,i+3);
             if(parseInt(
"0x"+asc)>0x7f){
              ret+=asc2str(parseInt(
"0x"+asc+str.substring(i+4,i+6)));
              i+=5;
             }else{
              ret+=asc2str(parseInt(
"0x"+asc));
              i+=2;
             }
            }else{
              ret+= chr;
            }
        }
        return ret;
    }
</script>

简单但行之有效的方法。

PS:事实上导致AJAX乱码的原因是没有指定页面的字符集。
只要在页面中用header("Content-Type: text/html; charset=gb2312");指定字符集即可,将gb2312替换成你使用的字符集,如果你使用的是utf-8,只要将gb2312替换成utf-8.
只有注册用户登录后才能发表评论。