zoukankan      html  css  js  c++  java
  • php自定义截取中文字符串-utf8版

    php自定义截取中文字符串-utf8版

    UTF-8的编码范围(utf-8使用1-6个字节编码字符,实际上只使用了1-4字节):

    1个字节:00——7F
    2个字节:C080——DFBF
    3个字符:E08080——EFBFBF
    4个字符:F0808080——F7BFBFBF
    $str = 'abcd我是中国人';
    
    echo strlen($str), '<br/>';
    
    
    echo mstrlen($str), '<br/>';
    
    echo msubstr($str, 3, 9);
    
    /**
     * 统计utf8下字符串长度
     */
    function mstrlen($str) {
       $len = 0;
       $i = 0;
       $slen = strlen($str);
       
       while ($i < $slen) {
           $o = ord($str[$i]);
           if ($o < 127) {
               $i++;
           } elseif ($o < 224) {
               $i+=2;
           } else {
               $i+=3;
           }
           $len++;
       }
       return $len;
    }
    /**
     * 截取utf8编码下的字符串
     */
    function msubstr($str, $start, $length) {
        $len = mstrlen($str);
        if($start < 0) {
            $start += $len;
            if($start < 0) {
                $start = 0;
            }
        }
        
        $slen = strlen($str);
        $index = 0;
        for ($i = 0; $i<$start && $i<$slen; $i++) {
            $o = ord($str[$index]);
            if ($o < 127) {
                $index++;
            }elseif ($o < 224) {
                $index+=2;
            } else {
                $index +=3;
            }
        }
        
        $length+=$index;
        
        $newStr = '';
        for ($i = $index; $i < $length && $i<$slen; $i++) {
            $o = ord($str[$i]);
            if ($o < 127) {
                $newStr .= $str[$i];
            } elseif ($o < 224) {
                $newStr .= substr($str, $i, 2);
                $i+=1;
                $length++;
            } else {
                $newStr .= substr($str, $i, 3);
                $i+=2;
                $length+=2;
            }
        }
        
        return $newStr;
    }
    

      

    模板哥 - 网页模板,网站模板,DIV模板,CSS模板,前端模板,官网,官网模板,企业网站模板下载,模板下载
  • 相关阅读:
    Linux makefile
    java泛型
    Java中Split函数的用法技巧
    mysql基础笔记
    Linux学习路线浅谈
    泛型的用法
    数据流图的画法
    oracle学习路线图
    c++学习建议
    C#学习建议
  • 原文地址:https://www.cnblogs.com/zw2582/p/6473666.html
Copyright © 2011-2022 走看看