有一个UTF-8字符串:"z7, 赵明"。 用 "," 分割,再分别转换为GBK。在"赵"之前有个英文输入的空格。我先用preg_split("/;+/u",$arrNames,-1, PREG_SPLIT_NO_EMPTY)分割,前半部分没有问题,后半部分我先trim(),再转换mb_convert_encoding($string, 'GBK', 'UTF-8'),出来的总是乱码。比较急,比较难,困扰我半天了谢谢!

解决方案 »

  1.   

    如果没有逗号及前面的部分,可以正常转换,但是这种情况下,trim()后如果再用preg_replace("/s+/u","",$str)处理一次,然后再转换,出来的友是乱码。看起来,似乎是 trim()或者preg_replace()处理的空格字节不干净,或者添加了字节。调试的时候又不可见
      

  2.   


    // 为啥不先转编码再分割恩?很奇怪
    $str = 'z7, 赵明';
    $str = iconv("UTF-8", "GBK//IGNORE", $str);
    var_dump( $str );
    $str = explode(',', $str);
    var_dump( $str );
      

  3.   

    1、z7, 赵明存为UTF8文件中
    2、新建一ANSI的php文件,内容如下header ("Content-type: text/html; charset=gbk");
    var_dump( $str = file_get_contents('文件名') );
    $str = iconv("UTF-8", "GBK//IGNORE", $str);
    var_dump( $str );
    $str = explode(',', $str);
    var_dump( $str );
      

  4.   

    不想要那个空格。另外,那个字符串是用户通过一个UTF-8页面返回给服务器的,不能存到文件里,要先处理。最终的效果是,要分割后的字段是英文,或者中文,并且每个字段两端要去掉空格,如果有的话。
      

  5.   

    真是奇怪啊,网上能找到的代码都不灵啊?没有办法了吗? IE FF 是咋整的?
      

  6.   

    楼主pre_split的正则,如果是以,分割的话,不是这么写的吧……
    $arr=preg_split("/[,\s]+/",$arrNames,-1, PREG_SPLIT_NO_EMPTY);
    参考下这个,是以,号后加一个空格  来分割。
    <?php
    $arrNames="z7, 赵明";
    $arr=preg_split("/[,\s]+/",$arrNames,-1, PREG_SPLIT_NO_EMPTY);
    //var_dump($arr);
    $string=trim($arr[1]);
    $str=mb_convert_encoding($string, 'GBK', 'UTF-8');
    echo $str;
    ?>这个可以输出的额……不知道我这样测试对不对,我将文件保存为utf8  和ansi 都能输出不会乱码
      

  7.   

    规则里加空格也不行啊,不知道怎么回事。 按理分出来的后半部分没有空格了,可是出来还是乱码。我把那个字符串拷到notepad++里,选择ANSI格式可以正常显示,选择UTF-8,就是乱码。难倒不是utf8编码的? 我用的是IE7,返回的应该是utf8啊。
      

  8.   

    在header里有,charset = utf-8. 不是写meta 的那个header,是http的。
      

  9.   

    返回form到同一个页面,也是 utf-8的
      

  10.   

    你不是把utf-8的数据转成gbk然后输出了吗,怎么还header charset=utf-8?应该
    header("Content-type:text/html;charset=gbk");
      

  11.   

    再看了看你的问题,唉,真乱。
    你只给出的数据串是"z7, 赵明"
    那么你preg_split("/;+/u",$arrNames,-1, PREG_SPLIT_NO_EMPTY)这个正则分割所为何事?前半部分是那些数据?后半部分是哪些数据?
      

  12.   

    不好意思啊,因为问题是摘出来的,说的不太清楚。中间一步逗号变分号省略了,所以正则里是分号,在这问的时候应该是"/,+/u",数据串"z7, 赵明"是加了header("Content-type:text/html;charset=utf-8")的页面返回来的,要分割成"z7"和"赵明"两部分。然后转换为GBK不是为了直接用于再次输出,而是要去做汉字转换为拼音,那里需要的是GBK的汉字,所以先要utf8到GBK的转换。所以也没有charset=gbk的页面。谢谢!再考虑一下。