Posted on 2008-06-08 20:56
魔のkyo 阅读(469)
评论(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.