td内无内容如何显示边框线- -| 回首页 | 2006年索引 | - -打开居中窗口

Ajax(xmlhttp request)中文乱码的解决方案

关键词ajax    xmlhttp    中文    乱码                                          

xmlhttp request传值时我们时常碰到乱码问题,但只要采用encodeURIComponent(参数) 就不会有乱码了,不用utf-8传值在非IE下将会显示乱码。

提交form时,我们可以先给form里的参数全部用encodeURIComponent处理下。如(post)

   Var params="";

    for(var i=0;i<thisform.elements.length;i++){

     var elem=thisform.elements[i];

     params+=(elem.name+"="+encodeURIComponent(elem.value.trim()));    

     if(i!=(thisform.elements.length-1))params+="&";

    }

 

通过encodeURIComponent(参数)传递的值,js下用decodeURIComponent解码取值。但decodeURIComponent处理不了页面是gbk编码的urlencode()这样的数据(这个非常麻烦,好像需要对每个gbk字符专门处理才行,如果页面全部是utf-8的就没有问题了)

 

后台如果是gbk编码的话,那不能直接用 urldecode()解用encodeURIComponent传递来的值,而需要转换成utf-8。如

Java: 

String word="";

      if (request.getParameter("word")!=null){

           word=request.getParameter("word");

           //word = new String(word.getBytes("ISO-8859-1"),"GBK");这样传值,在使用xmlHTTP取值时可能会乱码,因为ff传递使用的是Uniocde编码;

          

           /*如果js里用到了encodeURIComponent(query),就用下面这种方式取值;兼容任何编码和浏览器*/

           word=java.net.URLDecoder.decode(word);

           word = new String(word.getBytes("ISO-8859-1"),"UTF-8");

           }

 

Php:

$word="";

if(!Empty($_POST["word"])){

      $word = $_POST["word"].trim();

      $word = iconv("utf-8", "gbk",urldecode($word));

}

 这样再试一试,在ie,ff,opera下都没有乱码了吧。其实关键在于是否采用utf-8编码。

【作者: 皮子/Jarry/Jiarry】【访问统计:】【2006年08月10日 星期四 15:44】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5512258

回复

验证码:   
评论内容: