UTF8 不是占两个字符,而是三个。

解决方案 »

  1.   

    是改成这样的吗:
    preg_replace("/[\x80-\xff]{3}/","\\0".chr(0x00),$str);(2->3)还是不对,全是乱码
      

  2.   

    1. $str = preg_replace("/[\x80-\xff]{2}/","\\0".chr(0x00),$str);改成$str = preg_replace("/[\x80-\xff]{3}/","\\0".chr(0x00),$str);
    2. preg_match_all("/[\x80-\xff]?./",$str,$ar);改成 preg_match_all("/[\x80-\xff]+?\\x00/",$str,$ar);
    3. if ( strlen($ar[$i+1]) == 2 ) 改成if ( strlen($ar[$i+1]) >= 2 )
      

  3.   

    第二个地方改成这样:
    /[\x80-\xff]+?\\x00/ 后,英文字母数字这种就不匹配了比如有一个字符串是“你好PHP!”就只能分出“你好”一个词
    而原来有“你好”和“PHP”二个词不知道这里的的正则应该怎么写既能满足分utf8编码的字符又能认得英文字母或数字等,谢谢。
      

  4.   

    print_r(dualDecom(iconv('utf-8', 'gbk', '测试一下')));
      

  5.   

    改成
    preg_match_all("/[\x80-\xff]{0,3}./",$str,$ar);