【转】字符串截取,支持中文和其他编码

来源:互联网 发布:软件测试培训靠谱不 编辑:程序博客网 时间:2024/06/06 21:38
 
/**+----------------------------------------------------------* 字符串截取,支持中文和其他编码+----------------------------------------------------------* @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);

原创粉丝点击