一、字符串截取
1.字符串截取,汉字占3个字符,英文占2个字符
/** * @param $str 字符串 * @param int $length 截取长度 * @param string $encoding 字符编码 * @return mixed|string * author : huangpeng * 简介: * Date: 2020/3/25 * Time: 23:01 */ function isubstr($str, $length = 20, $encoding = 'utf8') { $str = strip_tags(htmlspecialchars_decode($str, ENT_HTML5));//strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。 $str = str_replace(array("\t", "\r", "\n", ' ', '"', "'", ' '), '', trim($str)); is_null($encoding) && $encoding = mb_internal_encoding(); $count = mb_strlen($str, $encoding); $count += (strlen($str) - $count) / 2; if ($count > $length) { do { $count = $length - $count; $count < -5 && $count = $count / 2; $str = mb_substr($str, 0, $count, $encoding); $count = mb_strlen($str, $encoding); $count += (strlen($str) - $count) / 2; } while ($count > $length); $str .= '…'; } return $str; }
2.个人觉得最优解的字符串截取,全部按一个字符位来算:
/** * @param $str 字符串 * @param int $start 开始位 * @param $length 截取长度 * @param string $charset 字符串编码 * @param string $suffix ‘...’ * @return string *@介绍:实现中文字串截取无乱码的方法--适用于utf-8 * @author huangpeng * @Time 2020/3/25 17:09 */ function substr_text($str, $start=0, $length, $charset="utf-8", $suffix="...") { $str = strip_tags(htmlspecialchars_decode($str, ENT_HTML5));//strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。 $str = str_replace(array("\t", "\r", "\n", ' ', '"', "'", ' '), '', trim($str)); if(function_exists("mb_substr")){ $srtNew=mb_substr($str, $start, $length, $charset); $count = mb_strlen($srtNew, $charset); if($count==$length){ return $srtNew.$suffix; }else{ return $srtNew; } } elseif(function_exists('iconv_substr')){ $srtNew = iconv_substr($str,$start,$length,$charset).$suffix; $count = mb_strlen($srtNew, $charset); if($count==$length){ return $srtNew.$suffix; }else{ return $srtNew; } } $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $srtNew = join("",array_slice($match[0], $start, $length)); $count = mb_strlen($srtNew, $charset); if($count==$length){ return $srtNew.$suffix; }else{ return $srtNew; } }
本文由37°5【https://www.alvinxiao.com】原创,转载请注明来源。请尊重原创和营造和谐的网络环境,谢谢!