php截取中文字符串

1. 截取GB2312中文字符串
<?php
< ? 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
< ? 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
< ? 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
< ? 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 ) ; 
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值