截取中文字符串

2017-09-10  本文已影响0人  上善若水_900e

/**

* 截取中文字符串

* @param string $string 中文字符串

* @param int $sublen 截取长度

* @param int $start 开始长度 默认0

* @param string $code 编码方式 默认UTF-8

* @param string $omitted 末尾省略符 默认...

* @return string

*/

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

{

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)).$omitted;

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.= $omitted;

return $tmpstr;

}

}

上一篇 下一篇

猜你喜欢

热点阅读