|中国人|两个竖线中间第一个汉子是一个特殊符号。utf-8 gbk 编码转换总是会出现问题?有哪位大拿遇到过这个问题?

解决方案 »

  1.   

    <?php
    $str="中国人";
    echo $str2=mb_convert_encoding($str,"GBK","UTF-8");这个代码保存为 utf8编码的文本文件,然后运行会出现:  ?中国人第一个特殊字符已经丢失。问题的场景出现在: web页面用ajax提交数据的时候,ajax默认会对数据进行 encodeURIComponent 编码,
    encodeURIComponent编码会将字符转成 utf-8,而环境是gbk的,所以需要将字符从 utf-8转成 gbk, 导致特殊符号出现问题。不知道其他兄弟有没有遇到过?
      

  2.   

    直接用utf-8编码,不转码。
    文件用utf-8
    header("content-type:text/html;charset=utf-8");也用utf-8不行么
      

  3.   

    $str="中国人";
    这个是什么情况? 是ajax提交上来就这样了?
      

  4.   

    如果都是utf8 不会遇到这个问题。
    ajax后提交的内容是  $str="%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA";可以看到这个有 12个字节,每个汉子三个字节,所以已经转成了 utf-8,要想再转成 gbk 就出问题了。
      

  5.   

    为什么一定要转换成gbk呢?
    给我个理由先。
      

  6.   

    那你从DB中拿出数据后先转成正常的再用,
    encodeURIComponent();//里面的东东正码先是正确的码编,不要在之前已经出错了
      

  7.   

    <?php
    $str="%EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA";
    echo $str."=>";
    $str =  mb_convert_encoding(urldecode($str), "gb2312","utf-8");
    echo $str;echo "<br/>";
    echo $str."=>";
    $str = mb_convert_encoding( $str,"utf-8","gb2312");
    echo urlencode($str);
    ?>
      

  8.   

    %EE%9F%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA=>珑中国人
    珑中国人=>%E7%8F%91%E4%B8%AD%E5%9B%BD%E4%BA%BA
      

  9.   

    前后的 urlencode 也不一致了
      

  10.   

    如果利用ajax就会出现乱码。最好是在php.ini里面进行编码转换,或者在程序段进行转码,两种方法都要做到位!
      

  11.   

    这个问题我以前遇到过,先转成utf-8,然后ajax提交的结果再转回成gbk就好了