中英文混截,一个中文相当于n个英文

项目中遇到这么个需求,截取中英文字符串,一个中文相当于2个英文,全英文时截取12个英文字母,全中文时是6个中文汉字,中英文混合时是12个字节,在网上有找到这样的解决方案,但我没能静下心来研究懂,于是自己根据他的启发写了个方法,如下所示:

网上找到的解决方案:http://waiting.iteye.com/blog/581888

<?php

  /**
     * 中英文混截
     * @param type $str 需要截取的字符串
     * @param type $width 需要截取的长度
     * @param type $end 超过截取长度的部分代替字符串
     * @param type $equto 一个中文等价于几个字节
     * @return string 新字符串
     */
    public function str_substr($str, $width, $end = '...', $equto = 2) {
        $arr = [];
        //使用mb_strlen获取字符串长度,mb_substr截取字符串
        $len = mb_strlen($str);
        for($m = 0; $m<$len; $m++) {
            $arr[] = mb_substr($str, $m, 1);
        }
        $newStr = '';
        $newlen = 0;
        for($i=0; $i<count($arr); $i++) {
            if($newlen < $width) {
                if(mb_strlen($arr[$i]) == strlen($arr[$i])) {
                    $newStr .= $arr[$i];
                    $newlen += 1;
                }else {
                    $newStr .= $arr[$i];
                    $newlen += $equto*1;
                }
            }
        }
        if($len > $width) {
            $newStr .= $end;
        }
        return $newStr;
    }
原文地址:https://www.cnblogs.com/totian/p/7844859.html