zoukankan      html  css  js  c++  java
  • 收藏几个支持中文的PHP字符串截取函数

    字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。
    01    <?php
    02    function sysSubStr($string,$length,$append = false)
    03    {
    04        if(strlen($string) <= $length )
    05        {
    06            return $string;
    07        }
    08        else
    09        {
    10            $i = 0;
    11            while ($i < $length)
    12            {
    13                $stringTMP = substr($string,$i,1);
    14                if ( ord($stringTMP) >=224 )
    15                {
    16                    $stringTMP = substr($string,$i,3);
    17                    $i = $i + 3;
    18                }
    19                elseif( ord($stringTMP) >=192 )
    20                {
    21                    $stringTMP = substr($string,$i,2);
    22                    $i = $i + 2;
    23                }
    24                else
    25                {
    26                    $i = $i + 1;
    27                }
    28                $stringLast[] = $stringTMP;
    29            }
    30            $stringLast = implode("",$stringLast);
    31            if($append)
    32            {
    33                $stringLast .= "...";
    34            }
    35            return $stringLast;
    36        }
    37    }
    38      
    39    $string = "简明现代魔法 —— 专注于互联网主流的各种技术";
    40    $length = "27";
    41    $append = true;
    42    echo sysSubStr($string,$length,$append);
    43    // 输出
    44    // 简明现代魔法 —— 专...
    45    ?>
    
    截取GB2312中文字符串:
    01    <?php
    02    //截取中文字符串
    03    function mysubstr($str, $start, $len) {
    04        $tmpstr = "";
    05        $strlen = $start + $len;
    06        for($i = 0; $i < $strlen; $i++) {
    07            if(ord(substr($str, $i, 1)) > 0xa0) {
    08                $tmpstr .= substr($str, $i, 2);
    09                $i++;
    10            } else
    11                $tmpstr .= substr($str, $i, 1);
    12        }
    13        return $tmpstr;
    14    }
    15    ?>
    
    截取utf8编码的多字节字符串:
    1    <?php
    2    //截取utf8字符串
    3    function utf8Substr($str, $from, $len)
    4    {
    5        return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
    6                           '((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
    7                           '$1',$str);
    8    }
    9    ?>
    
    UTF-8、GB2312都支持的汉字截取函数:
    01    <?php
    02    /*
    03    Utf-8、gb2312都支持的汉字截取函数
    04    cut_str(字符串, 截取长度, 开始长度, 编码);
    05    编码默认为 utf-8
    06    开始长度默认为 0
    07    */
    08      
    09    function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
    10    {
    11        if($code == 'UTF-8')
    12        {
    13            $pa = "/[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]/";
    14            preg_match_all($pa, $string, $t_string);
    15      
    16            if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
    17            return join('', array_slice($t_string[0], $start, $sublen));
    18        }
    19        else
    20        {
    21            $start = $start*2;
    22            $sublen = $sublen*2;
    23            $strlen = strlen($string);
    24            $tmpstr = '';
    25      
    26            for($i=0; $i< $strlen; $i++)
    27            {
    28                if($i>=$start && $i< ($start+$sublen))
    29                {
    30                    if(ord(substr($string, $i, 1))>129)
    31                    {
    32                        $tmpstr.= substr($string, $i, 2);
    33                    }
    34                    else
    35                    {
    36                        $tmpstr.= substr($string, $i, 1);
    37                    }
    38                }
    39                if(ord(substr($string, $i, 1))>129) $i++;
    40            }
    41            if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
    42            return $tmpstr;
    43        }
    44    }
    45      
    46    $str = "abcd需要截取的字符串";
    47    echo cut_str($str, 8, 0, 'gb2312');
    48    ?>
  • 相关阅读:
    markdown with vim
    递归
    类 sizeof
    cppcheck工具
    c++ explicit的含义和用法
    pca主成分分析
    string的使用
    linux的shell进化简史
    adb shell 无法启动 (insufficient permissions for device)
    c++ 四种转换的意思
  • 原文地址:https://www.cnblogs.com/afei-happy/p/3376120.html
Copyright © 2011-2022 走看看