zoukankan      html  css  js  c++  java
  • 中英文混截,一个中文相当于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;
        }
  • 相关阅读:
    Tarjan-割点&桥&双连通
    树状数组
    loli的搜索测试-5
    思维题
    生成树
    贪心
    loli的搜索测试-4
    树链剖分
    基于AHK的上课自动签到
    用列表实现栈
  • 原文地址:https://www.cnblogs.com/totian/p/7844859.html
Copyright © 2011-2022 走看看