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') ;

?> 

相关推荐