+ -
当前位置:首页 → 问答吧 → 将中英文混排将每一个字分解开

将中英文混排将每一个字分解开

时间:2011-12-17

来源:互联网

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

作者: Jack_Hu   发布时间: 2011-12-17

已得解
PHP code

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;
}

作者: Jack_Hu   发布时间: 2011-12-17

PHP code
/**
 * 按指定宽度切割字符串
 * 与 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 环境测试例PHP code
$s = "中zhong华hua人民共和国"; //GBK编码
print_r( str_chunk($s, 2) );

$s = iconv('gbk', 'utf-8', "中zhong华hua人民共和国"); //转换成UTF-8编码
print_r( str_chunk($s) );


PHP code
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] => 鍥�
)


作者: xuzuning   发布时间: 2011-12-17

热门下载

更多