• php汉字截取


    /**
     * 截取HTML,并自动补全闭合
     * @param $html
     * @param $length
     * @param $end
     */
    function subHtml($html,$length,$charset) {
        $result = '';
        $tagStack = array();
        $len = 0;    
        $contents = preg_split("~(<[^>]+?>)~si",$html, -1,PREG_SPLIT_NO_EMPTY| PREG_SPLIT_DELIM_CAPTURE);
    
        foreach($contents as $tag)
        {
            
            if (trim($tag)=="") continue;
            
            if(preg_match("~<([a-z0-9]+)[^/>]*?/>~si",$tag)){
                $result .= $tag;
            }else if(preg_match("~</([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
                if($tagStack[count($tagStack)-1] == $match[1]){
                    array_pop($tagStack);
                    $result .= $tag;
                }
            }else if(preg_match("~<([a-z0-9]+)[^/>]*?>~si",$tag,$match)){
                array_push($tagStack,$match[1]);
                $result .= $tag;
            }else if(preg_match("~<!--.*?-->~si",$tag)){
                $result .= $tag;
            }else{
                if($len + mstrlen($tag, $charset) < $length){
                    $result .= $tag;
                    $len += mstrlen($tag, $charset); 
                }else {
                    $str = msubstr($tag,0,$length-$len+1,'', $charset);
                    $result .= $str;
                    break;
                }
            }
        }
            
        while(!empty($tagStack)){        
            $result .= '</'.array_pop($tagStack).'>';
        }
        
            
        return $result;
    }
    
    /**
     * 取得字符串的长度,包括中英文。
     */
    function mstrlen($str,$charset = 'UTF-8'){
        if (function_exists('mb_substr')) {
            $length=mb_strlen($str,$charset);
        } elseif (function_exists('iconv_substr')) {
            $length=iconv_strlen($str,$charset);
        } else {
            preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $text, $ar); 
            $length=count($ar[0]);
        }
        return $length;
    }
    
    /**
     * 截取中文字符串
     * @param $string 字符串
     * @param $start 起始位
     * @param $length 长度
     * @param $charset&nbsp; 编码
     * @param $dot 附加字串
     */
    function msubstr($string, $start, $length,$dot='...',$charset = 'UTF-8') {
        $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;','&nbsp;'), array('&', '"', '<', '>',' '), $string);
        if(strlen($string) <= $length) {
            return $string;
        }
        if(strtolower($charset) == 'utf-8') {
            $n = $tn = $noc = 0;
            while($n < strlen($string)) {
                $t = ord($string[$n]);
                if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
                    $tn = 1; $n++;
                } elseif(194 <= $t && $t <= 223) {
                    $tn = 2; $n += 2;
                } elseif(224 <= $t && $t <= 239) {
                    $tn = 3; $n += 3;
                } elseif(240 <= $t && $t <= 247) {
                    $tn = 4; $n += 4;
                } elseif(248 <= $t && $t <= 251) {
                    $tn = 5; $n += 5;
                } elseif($t == 252 || $t == 253) {
                    $tn = 6; $n += 6;
                } else {
                    $n++;
                }
                $noc++;
                if($noc >= $length) {
                    break;
                }
            }
            if($noc > $length) {
                $n -= $tn;
            }
            $strcut = substr($string, 0, $n);
        } else {
            for($i = 0; $i < $length; $i++) {
                $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
            }
        }
        return $strcut.$dot;
    }
  • 相关阅读:
    测试人员如何甩锅
    测试用例,写不写?
    软件测试很简单么?
    体系认证、白皮书与行业大会
    对话云层
    专项测试怎样才“好玩”
    k8s环境 构建 工具 kubeadmin 似于openstack自动化工具kollaansible等
    git clone 带入username passed
    数据库ACID REDIS ACID实现
    jforg devops 持续集成交付 软件交付流水线 知识点大方向汇总备忘
  • 原文地址:https://www.cnblogs.com/kevin0709/p/3685306.html
Copyright © 2020-2023  润新知