本文用php来对字符串的截取,如文章去除代码截取,标题、简介截取

一、字符串截取

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】原创,转载请注明来源。请尊重原创和营造和谐的网络环境,谢谢!

分享到: