方法一:
/**
+----------------------------------------------------------
* 功能:字符串截取指定长度
* leo.li hengqin2008@qq.com
+----------------------------------------------------------
* @param string $string 待截取的字符串
* @param int $len 截取的长度
* @param int $start 从第几个字符開始截取
* @param boolean $suffix 是否在截取后的字符串后跟上省略号
+----------------------------------------------------------
* @return string 返回截取后的字符串
+----------------------------------------------------------
*/
function cutStr($str, $len = 100, $start = 0, $suffix = 1) {
$str = strip_tags(trim(strip_tags($str)));
$str = str_replace(array("\n", "\t"), "", $str);
$strlen = mb_strlen($str);
while ($strlen) {
$array[] = mb_substr($str, 0, 1, "utf8");
$str = mb_substr($str, 1, $strlen, "utf8");
$strlen = mb_strlen($str);
}
$end = $len + $start;
$str = '';
for ($i = $start; $i < $end; $i++) {
$str.=$array[$i];
}
return count($array) > $len ? ($suffix == 1 ? $str . "…" : $str) : $str;
}
方法二:
header("Content-type:text/html; charset=utf8");
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="我slskjd!fl是总那地方拉伸款到即发";
echo cut_str($str, 8, 5);