php Smarty 使用手册和一些常见问题,使用心得

http://www.olteaching.com/file/smarty/

// truncate -> 用来截断指定长度字符串
//{$内容|truncate:5:"..."}
//
//还有个经过改良,支持多种编码的..



直接重命名为
: modifier . smartTruncate . php 保存到Smarty 的 plugins 目录下
<? php 
function  smartDetectUTF8( $string

     
static   $result   =   array (); 

     
if ( !   array_key_exists ( $key   =   md5 ( $string ) ,   $result )) 
     { 
        
$utf8   =   "  
             /^(?: 
                 [ -~]              # ASCII 
                 | [Â-ß][€-¿]             # non-overlong 2-byte 
                 | à[ -¿][€-¿]         # excluding overlongs 
                 | [á-ìîï][€-¿]{2} # straight 3-byte 
                 | í[€-Ÿ][€-¿]         # excluding surrogates 
                 | ð[-¿][€-¿]{2}      # planes 1-3 
                 | [ñ-ó][€-¿]{3}          # planes 4-15 
                 | ô[€-][€-¿]{2}      # plane 16 
             )+$/xs 
         
"

        
$result [ $key =   preg_match ( trim ( $utf8 ) ,   $string ); 
     } 

     
return   $result [ $key ]; 


function  smartStrlen( $string

    
$result   =   0

    
$number   =  smartDetectUTF8( $string ?   3   :   2

     
for ( $i   =   0 $i   <   strlen ( $string );  $i   +=   $bytes
     { 
        
$bytes   =   ord ( substr ( $string ,   $i ,   1 ))  >   127   ?   $number   :   1

        
$result   +=   $bytes   >   1   ?   1.0   :   0.5
     } 

     
return   $result


function  smartSubstr( $string ,   $start ,   $length   =   null

    
$result   =   ''

    
$number   =  smartDetectUTF8( $string ?   3   :   2

     
if ( $start   <   0
     { 
        
$start   =   max (smartStrlen( $string +   $start ,   0 ); 
     } 

     
for ( $i   =   0 $i   <   strlen ( $string );  $i   +=   $bytes
     { 
         
if ( $start   <=   0
         { 
             
break
         } 

        
$bytes   =   ord ( substr ( $string ,   $i ,   1 ))  >   127   ?   $number   :   1

        
$start   -=   $bytes   >   1   ?   1.0   :   0.5
     } 

     
if ( is_null ( $length )) 
     { 
        
$result   =   substr ( $string ,   $i ); 
     } 
     
else  
     { 
         
for ( $j   =   $i $j   <   strlen ( $string );  $j   +=   $bytes
         { 
             
if ( $length   <=   0
             { 
                 
break
             } 

             
if (( $bytes   =   ord ( substr ( $string ,   $j ,   1 ))  >   127   ?   $number   :   1 >   1
             { 
                 
if ( $length   <   1.0
                 { 
                     
break
                 } 

                
$result   .=   substr ( $string ,   $j ,   $bytes ); 
                
$length   -=   1.0
             } 
             
else  
             { 
                
$result   .=   substr ( $string ,   $j ,   1 ); 
                
$length   -=   0.5
             } 
         } 
     } 

     
return   $result


function  smarty_modifier_smartTruncate( $string ,   $length   =   80 ,   $etc   =   ' ... ' ,  
                                       
$break_words   =   false ,   $middle   =   false

     
if  ( $length   ==   0
         
return   ''

     
if  (smartStrlen( $string >   $length ) { 
        
$length   -=  smartStrlen( $etc ); 
         
if  ( ! $break_words   &&   ! $middle ) { 
            
$string   =   preg_replace ( ' /s+?(S+)?$/ ' ,   '' ,  smartSubstr( $string ,   0 ,   $length + 1 )); 
         } 
         
if ( ! $middle ) { 
             
return  smartSubstr( $string ,   0 ,   $length ) . $etc
         } 
else  { 
             
return  smartSubstr( $string ,   0 ,   $length / 2 .   $etc   .  smartSubstr( $string ,   - $length / 2 ); 
         } 
     } 
else  { 
         
return   $string
     } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值