php中截取字符串支持utf-8

  截取字符串

  <?php

  $string="2006年4月我又长大了一岁!";

  echo substr($string,1)."...";

  //截取字符串

  function SubstrGB($in,$num)

  {

  $pos=0;

  $out="";

  while($pos<strlen($in))

  {

  $c=substr($in,$pos,1);

  if($c=="\n") break;

  if(ord($c)>128)

  {

  $out.=$c;

  $pos++;

  $c=substr($in,$pos,1);

  $out.=$c;

  }

  else

  {

  $out.=$c;

  }

  $pos++;

  if($pos>=$num) break;

  }

  return $out;

  }

  echo SubstrGB($string,8) ;

  ?>

  <?php

  /***************************************************************************

  *            cut_string.php

  *        ------------------------------

  *    Date        : Jul 16, 2005

  *    Copyright    : none

  *    Mail        :

  *

  *    作用:截取中文字符.

  *

  *

  ***************************************************************************/

  function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')

  {

  if($code == 'UTF-8')

  {

  $pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";

  preg_match_all($pa, $string, $t_string);

  if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";

  return join('', array_slice($t_string[0], $start, $sublen));

  }

  else

  {

  $start  = $start*2;

  $sublen = $sublen*2;

  $strlen = strlen($string);

  $tmpstr = '';

  for($i=0; $i<$strlen; $i++)

  {

  if($i>=$start && $i<($start+$sublen))

  {

  if(ord(substr($string, $i, 1))>129) $tmpstr.= substr($string, $i, 2);

  else $tmpstr.= substr($string, $i, 1);

  }

  if(ord(substr($string, $i, 1))>129) $i++;

  }

  if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";

  return $tmpstr;

  }

  }

  echo "<br>".cut_str($string,8,$start=0,$code='sdf') ;

  ?>