帝国cms函数:esub() 截取字段函数,模板制作必备

时间:2016-02-26 22:33:21

分类:帝国教程

语法:esub(字符串,截取字数,后缀)

说明:后缀为截取字符后附带内容,此参数可以省略。

函数位置:/e/class/connect.php 984行(帝国cms7.2UTF8版本)

使用范例:

<?=esub('12345678',6)?>,返回结果为:123456

<?=esub('12345678',6,'...')?>,返回结果为:123456...

说明:

这里边有个比较重要的功能,就是函数的第三个参数“后缀”,这里可以填省略号,也可以填其他字符,这样可以实现如果字符串被截取,那么会自动追加省略号,如果未被截取则不会追加,在制作模板中非常实用。

函数完整代码:

折叠PHP 代码
  1. //截取字数  
  2. function esub($string,$length,$dot='',$rephtml=0){  
  3.     return sub($string,0,$length,false,$dot,$rephtml);  
  4. }  

说明:esub()函数中另外使用了一个子函数,为字符截取的完整过程,完整代码如下:

折叠PHP 代码
  1. //字符截取函数  
  2. function sub($string,$start=0,$length,$mode=false,$dot='',$rephtml=0){  
  3.     global $ecms_config;  
  4.     $strlen=strlen($string);  
  5.     if($strlen<=$length)  
  6.     {  
  7.         return $string;  
  8.     }  
  9.   
  10.     if($rephtml==0)  
  11.     {  
  12.         $string = str_replace(array(' ','&','"','<','>','''), array(' ','&','"','<','>',"'"), $string); 
  13.     } 
  14.  
  15.     $strcut = ''; 
  16.     if(strtolower($ecms_config['sets']['pagechar']) == 'utf-8') { 
  17.  
  18.         $n = $tn = $noc = 0; 
  19.         while($n < $strlen) { 
  20.  
  21.             $t = ord($string[$n]); 
  22.             if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { 
  23.                 $tn = 1; $n++; $noc++; 
  24.             } elseif(194 <= $t && $t <= 223) { 
  25.                 $tn = 2; $n += 2; $noc += 2; 
  26.             } elseif(224 <= $t && $t < 239) { 
  27.                 $tn = 3; $n += 3; $noc += 2; 
  28.             } elseif(240 <= $t && $t <= 247) { 
  29.                 $tn = 4; $n += 4; $noc += 2; 
  30.             } elseif(248 <= $t && $t <= 251) { 
  31.                 $tn = 5; $n += 5; $noc += 2; 
  32.             } elseif($t == 252 || $t == 253) { 
  33.                 $tn = 6; $n += 6; $noc += 2; 
  34.             } else { 
  35.                 $n++; 
  36.             } 
  37.  
  38.             if($noc >= $length) { 
  39.                 break; 
  40.             } 
  41.  
  42.         } 
  43.         if($noc > $length) { 
  44.             $n -= $tn; 
  45.         } 
  46.  
  47.         $strcut = substr($string, 0, $n); 
  48.  
  49.     } else { 
  50.         for($i = 0; $i < $length; $i++) { 
  51.             $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; 
  52.         } 
  53.     } 
  54.  
  55.     if($rephtml==0) 
  56.     { 
  57.         $strcut = str_replace(array('&','"','<','>',"'"), array('&','"','<','>','''), $strcut);  
  58.     }  
  59.   
  60.     return $strcut.$dot;  
  61. }  

相关文章

相关推荐

为帝国CMS用户提供动力

Copyright © 2016 CmsDX.com All Rights Reserved.