微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php字符截取函数,支持UTF8/GBK

/**

 * 字符截取 支持UTF8/GBK

 * @param $string

 * @param $length

 * @param $dot

 */

function str_cut($string,$length,$dot = '...') {

    $strlen = strlen($string);

    if($strlen <= $length) return $string;

    $string = str_replace(array(' ','&nbsp;','&amp;','&quot;',''','&ldquo;','&rdquo;','&mdash;','&lt;','&gt;','&middot;','&hellip;'),array('∵',' ','&','"',"'",'“','”','—','<','>','·','…'),$string);

    $strcut = '';

    if(strtolower(CHARSET) == 'utf-8') {

        $length = intval($length-strlen($dot)-$length/3);

        $n = $tn = $noc = 0;

        while($n < strlen($string)) {

            $t = ord($string[$n]);

            if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {

                $tn = 1; $n++; $noc++;

            } elseif(194 <= $t && $t <= 223) {

                $tn = 2; $n += 2; $noc += 2;

            } elseif(224 <= $t && $t <= 239) {

                $tn = 3; $n += 3; $noc += 2;

            } elseif(240 <= $t && $t <= 247) {

                $tn = 4; $n += 4; $noc += 2;

            } elseif(248 <= $t && $t <= 251) {

                $tn = 5; $n += 5; $noc += 2;

            } elseif($t == 252 || $t == 253) {

                $tn = 6; $n += 6; $noc += 2;

            } else {

                $n++;

            }

            if($noc >= $length) {

                break;

            }

        }

        if($noc > $length) {

            $n -= $tn;

        }

        $strcut = substr($string,$n);

        $strcut = str_replace(array('∵',array(' ',$strcut);

    } else {

        $dotlen = strlen($dot);

        $maxi = $length - $dotlen - 1;

        $current_str = '';

        $search_arr = array('&','…','∵');

        $replace_arr = array('&amp;','&hellip;',' ');

        $search_flip = array_flip($search_arr);

        for ($i = 0; $i < $maxi; $i++) {

            $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];

            if (in_array($current_str,$search_arr)) {

                $key = $search_flip[$current_str];

                $current_str = str_replace($search_arr[$key],$replace_arr[$key],$current_str);

            }

            $strcut .= $current_str;

        }

    }

    return $strcut.$dot;

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐