php分割中文字符串

有时候要显示文章的一段简介,最基本的思想是把得到的文章定义一个字符串。然后将其按指定的字符数进行字符串的提取。如果是对于英文来说只要用substr这个函数就可以了,因为它的一个字符就是一个byte,但中文字符要两个字节。所以,如果是纯粹按字节这样简单分割就会出现不合意的结果。

基本的解决方案的思想是:把字符串中的一个个字符提取,然后进行识别(如果是ASCII,则其十进制小于127;如果是中文或者其它字符则其十进制大于127),依此遍历需要的数目。

代码如下:

function gb2312_substr($string, $start = 0, $len = 10)
{
$end = $start + $len;
$str_len = strlen($string);
if($end > $str_len)
{
   return $string;
}
$start_count = 0;
//找开始位置
for($j = 0; $j < $str_len; $j++)
{
   if($start_count >= $start)
   {
    break;
   }
   if(ord($string{$j}) < 127)
   {
    $start_count += 1;
    continue;
   }
   else
   {
    if(ord($string{$j+1}) > 127)
    {
     $start_count += 1;
     $j++;
     continue;
    }
    else
    {
     $start_count += 1;
     continue;
    }
   } 
}
//取字符
$s = '';
$result_count = 0;
for($i = $j; $i < $str_len; $i++)
{
   if($result_count >= $len)
   {
    break;
   }
   if(ord($string{$i}) < 127)
   {
    $s .= $string{$i};
    $result_count += 1;
    continue;
   }
   else
   {
    if(ord($string{$i+1}) > 127)
    {
     $s .= $string{$i} . $string{++$i};
     $result_count += 1;
     continue;
    }
    else
    {
     continue;
    }
   } 
}
return $s;
}

 

  1. function utf_substr($str,$len){  
  2.     for($i=0;$i<$len;$i++){  
  3.         $temp_str=substr($str,0,1);  
  4.         if(ord($temp_str) > 127){  
  5.             $i++;  
  6.             if($i<$len){  
  7.                 $new_str[]=substr($str,0,3);  
  8.                 $str=substr($str,3);  
  9.             }  
  10.         }else{  
  11.             $new_str[]=substr($str,0,1);  
  12.             $str=substr($str,1);  
  13.         }  
  14.     }  
  15.     return join($new_str);  

其实类型的代码可以到网上搜索,思想基本一样。

posted @ 2011-02-26 00:29  小菜园  阅读(936)  评论(0编辑  收藏  举报