PHP 截取字符串

Wesley13
• 阅读 861
1. 截取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; 
 } 
 ?> 
2. 截取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); 
 } 
 ?> 
3. 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');  
 ?> 
4. BugFree 的字符截取函数
< ?php  
 /**  
  * @package     BugFree  
  * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $  
  *  
  *  
  * Return part of a string(Enhance the function substr())  
  *  
  * @author                   Chunsheng Wang <wwccss@263.net>  
  * @param string  $String  the string to cut.  
  * @param int     $Length  the length of returned string.  
  * @param booble  $Append  whether append "...": false|true  
  * @return  string           the cutted string.  
  */  
 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 = "CodeBit.cn -- 简单、精彩、通用";  
 $Length = "18";  
 $Append = false;  
 echo sysSubStr($String,$Length,$Append);  
 ?>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这