/**
+----------------------------------------------------------
* 字符串截取,支持中文和其他编码
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @param String $str 需要转换的字符串
* @param Int $start 开始位置
* @param Int $length 截取长度
* @param String $charset 编码格式
* @param Boole $suffix 截断显示字符
* @param Int $suffix_num 截断字符长度
+----------------------------------------------------------
* @return String
+----------------------------------------------------------
*/
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true, $suffix_num=22)
{
//拆分成单个字符
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
preg_match_all($re[$charset], $str, $match);
//初始计数并分解找中文个数
$i=1;
foreach($match[0] AS $key => $values)
{
if($key < $suffix_num)
{
is_utf8($values)==1 ? $u8_num = $i++:'';//找到中文后加1
}
else
{
break;//满足条件退出
}
}
//mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符;减去中文个数
$slice = mb_substr($str, $start, $length - round($u8_num*1.2), $charset);
if(!empty($suffix) AND $length > $suffix_num)
{
return $slice."...";
}
return $slice;
}
echo msubstr('母亲节当日 柏芝自台abceefghijkmnopqrstoawsyz', $start=0, $length=20, $charset="utf-8", $suffix=true),'<br />';
echo msubstr('abceefg母 亲hijkmnopqrstoawsy节当日柏芝自台z', $start=0, $length=20, $charset="utf-8", $suffix=true);
【转】字符串截取,支持中文和其他编码
最新推荐文章于 2021-03-22 14:05:47 发布