php中如何截取中文字符串

 众所周知php原生函数substr是不支持截取中文字符串的。下面的代码提供了多种截取php中文字符串的方法。

 

1. 截取GB2312中文字符串

PHP代码
  1. <?php  
  2. //截取中文字符串  
  3. function mysubstr($str$start$len) {  
  4.     $tmpstr = "";  
  5.     $strlen = $start + $len;  
  6.     for($i = 0; $i < $strlen$i++) {  
  7.         if(ord(substr($str$i, 1)) > 0xa0) {  
  8.             $tmpstr .= substr($str$i, 2);  
  9.             $i++;  
  10.         } else  
  11.             $tmpstr .= substr($str$i, 1);  
  12.     }  
  13.     return $tmpstr;  
  14. }  
  15. ?>  

 

2. 截取utf8编码的多字节字符串

PHP代码
  1. <?php  
  2. < ?php  
  3. //截取utf8字符串  
  4. function utf8Substr($str$from$len)  
  5. {  
  6.     return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.  
  7.                        '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',  
  8.                        '$1',$str);  
  9. }  
  10. ?>  

 

3. UTF-8、GB2312都支持的汉字截取函数

PHP代码
  1. <?php  
  2. /* 
  3. Utf-8、gb2312都支持的汉字截取函数 
  4. cut_str(字符串, 截取长度, 开始长度, 编码); 
  5. 编码默认为 utf-8 
  6. 开始长度默认为 0 
  7. */  
  8.   
  9. 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 > $sublenreturn 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. ?>  

 

4. BugFree 的字符截取函数

PHP代码
  1. < ?php  
  2. /** 
  3.  * @package     BugFree 
  4.  * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ 
  5.  * 
  6.  * 
  7.  * Return part of a string(Enhance the function substr()) 
  8.  * 
  9.  * @author                  Chunsheng Wang <wwccss@263.net> 
  10.  * @param string  $String  the string to cut. 
  11.  * @param int     $Length  the length of returned string. 
  12.  * @param booble  $Append  whether append "...": false|true 
  13.  * @return string           the cutted string. 
  14.  */  
  15. function sysSubStr($String,$Length,$Append = false)  
  16. {  
  17.     if (strlen($String) < = $Length )  
  18.     {  
  19.         return $String;  
  20.     }  
  21.     else  
  22.     {  
  23.         $I = 0;  
  24.         while ($I < $Length)  
  25.         {  
  26.             $StringTMP = substr($String,$I,1);  
  27.             if ( ord($StringTMP) >=224 )  
  28.             {  
  29.                 $StringTMP = substr($String,$I,3);  
  30.                 $I = $I + 3;  
  31.             }  
  32.             elseif( ord($StringTMP) >=192 )  
  33.             {  
  34.                 $StringTMP = substr($String,$I,2);  
  35.                 $I = $I + 2;  
  36.             }  
  37.             else  
  38.             {  
  39.                 $I = $I + 1;  
  40.             }  
  41.             $StringLast[] = $StringTMP;  
  42.         }  
  43.         $StringLast = implode("",$StringLast);  
  44.         if($Append)  
  45.         {  
  46.             $StringLast .= "...";  
  47.         }  
  48.         return $StringLast;  
  49.     }  
  50. }  
  51.   
  52. $String = "php中如何截取中文字符串";  
  53. $Length = "18";  
  54. $Append = false;  
  55. echo sysSubStr($String,$Length,$Append);  
  56. ?>  

来源:http://www.cnblogs.com/nbkhic/archive/2011/07/16/2108335.html



上一篇: Mysql大小写转换
下一篇: 常用CSS光标样式
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1815
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑