中文截取字符串方法(指定长度之后的中文用逗号代替)

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

$str = "自乔布斯去世之后,外界一致认为是因为他的一如既往的固执,而错过了最佳治疗时间";
$aa= cut_str($str, 36, 0, 'gb2312');
print_r($aa);
?>

原文地址:https://www.cnblogs.com/myphper/p/3227221.html