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

    字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。
       <?php
       function sysSubStr($string,$length,$append = false)
       {
           if(strlen($string) <= $length )
           {
               return $string;
           }
           else
           {
               $i = 0;
               while ($i < $length)
               {
                   $stringTMP = substr($string,$i,1);
                   if ( ord($stringTMP) >=224 )
                   {
                       $stringTMP = substr($string,$i,3);
                       $i = $i + 3;
                   }
                   elseif( ord($stringTMP) >=192 )
                   {
                       $stringTMP = substr($string,$i,2);
                       $i = $i + 2;
                   }
                   else
                   {
                       $i = $i + 1;
                   }
                   $stringLast[] = $stringTMP;
               }
               $stringLast = implode("",$stringLast);
               if($append)
               {
                   $stringLast .= "...";
               }
               return $stringLast;
           }
       }
         
       $string = "简明现代魔法 —— 专注于互联网主流的各种技术";
       $length = "27";
       $append = true;
       echo sysSubStr($string,$length,$append);
       // 输出
       // 简明现代魔法 —— 专...
       ?>
    
    截取GB2312中文字符串:
       <?php
       //截取中文字符串
       function mysubstr($str, $start, $len) {
           $tmpstr = "";
           $strlen = $start + $len;
           for($i = 0; $i < $strlen; $i++) {
               if(ord(substr($str, $i, 1)) > 0xa0) {
                   $tmpstr .= substr($str, $i, 2);
                   $i++;
               } else
                   $tmpstr .= substr($str, $i, 1);
           }
           return $tmpstr;
       }
       ?>
    
    截取utf8编码的多字节字符串:
       <?php
       //截取utf8字符串
       function utf8Substr($str, $from, $len)
       {
           return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
                              '((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
                              '$1',$str);
       }
       ?>
    
    UTF-8、GB2312都支持的汉字截取函数:
       <?php
       /*
       Utf-8、gb2312都支持的汉字截取函数
       cut_str(字符串, 截取长度, 开始长度, 编码);
       编码默认为 utf-8
       开始长度默认为 0
       */
         
       function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
       {
           if($code == 'UTF-8')
           {
               $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]/";
               preg_match_all($pa, $string, $t_string);
         
               if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
               return join('', array_slice($t_string[0], $start, $sublen));
           }
           else
           {
               $start = $start*2;
               $sublen = $sublen*2;
               $strlen = strlen($string);
               $tmpstr = '';
         
               for($i=0; $i< $strlen; $i++)
               {
                   if($i>=$start && $i< ($start+$sublen))
                   {
                       if(ord(substr($string, $i, 1))>129)
                       {
                           $tmpstr.= substr($string, $i, 2);
                       }
                       else
                       {
                           $tmpstr.= substr($string, $i, 1);
                       }
                   }
                   if(ord(substr($string, $i, 1))>129) $i++;
               }
               if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
               return $tmpstr;
           }
       }
         
       $str = "abcd需要截取的字符串";
       echo cut_str($str, 8, 0, 'gb2312');
       ?>
  • 相关阅读:
    【BZOJ4769】超级贞鱼 归并排序求逆序对
    [简明版] 有道云笔记Markdown指南
    在Pycharm中配置Github
    Linux学习笔记之Xshell配色方案定制
    前端学习笔记之ES6快速入门
    魔改有道云笔记
    Python爬虫学习笔记之Centos下安装配置Mongodb3.6
    Linux学习笔记之CentOS6.9 防火墙的关闭以及开启
    Web前端学习笔记之jQuery选择器
    Django学习笔记之Queryset详解
  • 原文地址:https://www.cnblogs.com/wuheng1991/p/6497876.html
Copyright © 2011-2022 走看看