例如:字符串是 "中zhong华hua人民共和国"分解为 
array('中','z','h','o','n','g','华','h','u','a','人','民','共','和','国')
考虑两种编码utf8和gbk

解决方案 »

  1.   

    已得解function string2Array($sText)
    {
    $aArray = array();
    $iLen=strlen($sText);
    for($i;$i<$iLen;$i++)
    {
    $c=ord(substr($sText,0,1));
    if($c >252)
    {$p = 5;}
    elseif($c > 248)
    {$p = 4;}
    elseif($c > 240)
    {$p = 3;}
    elseif($c > 224)
    {$p = 2;}
    elseif($c > 192)
    {$p = 1;}
    else
    {$p = 0;}
    $sKey=substr($sText,0,$p+1);
    if($sKey===false)
    {break;}
    $aArray[]=$sKey;
    $sText=substr($sText,$p+1);
    }
    return $aArray;
    }
      

  2.   

    /**
     * 按指定宽度切割字符串
     * 与 str_split 相同,但是是宽字符安全的
     **/
    function str_chunk($s, $w=1, $charset='') {
      if(empty($charset)) {
         $t = iconv('utf-8', 'gbk', iconv('gbk', 'utf-8', $s));
         $charset = $t == $s ? 'gbk' : 'utf-8';
      }
      if($charset == 'utf-8') preg_match_all('/./su', $s, $r);
      else preg_match_all('/[\x80-\xff]?./s', $s, $r);
      if($w <= 1) return $r[0];
      $r = array_chunk($r[0], $w);
      return array_map(create_function('$v', 'return join("", $v);'), $r);
    }GBK 环境测试例$s = "中zhong华hua人民共和国"; //GBK编码
    print_r( str_chunk($s, 2) );$s = iconv('gbk', 'utf-8', "中zhong华hua人民共和国"); //转换成UTF-8编码
    print_r( str_chunk($s) );Array
    (
        [0] => 中z
        [1] => ho
        [2] => ng
        [3] => 华h
        [4] => ua
        [5] => 人民
        [6] => 共和
        [7] => 国
    )
    Array
    (
        [0] => 涓�
        [1] => z
        [2] => h
        [3] => o
        [4] => n
        [5] => g
        [6] => 鍗�
        [7] => h
        [8] => u
        [9] => a
        [10] => 浜�
        [11] => 姘�
        [12] => 鍏�
        [13] => 鍜�
        [14] => 鍥�
    )
      

  3.   

    如果是"中zhõng华huá人民共和国"的话呢。