语法:esub(字符串,截取字数,后缀)
说明:后缀为截取字符后附带内容,此参数可以省略。
函数位置:/e/class/connect.php 984行(帝国cms7.2UTF8版本)
使用范例:
<?=esub('12345678',6)?>,返回结果为:123456
<?=esub('12345678',6,'...')?>,返回结果为:123456...
说明:
这里边有个比较重要的功能,就是函数的第三个参数“后缀”,这里可以填省略号,也可以填其他字符,这样可以实现如果字符串被截取,那么会自动追加省略号,如果未被截取则不会追加,在制作模板中非常实用。
函数完整代码:
折叠展开PHP 代码
-
- function esub($string,$length,$dot='',$rephtml=0){
- return sub($string,0,$length,false,$dot,$rephtml);
- }
说明:esub()函数中另外使用了一个子函数,为字符截取的完整过程,完整代码如下:
折叠展开PHP 代码
-
- function sub($string,$start=0,$length,$mode=false,$dot='',$rephtml=0){
- global $ecms_config;
- $strlen=strlen($string);
- if($strlen<=$length)
- {
- return $string;
- }
-
- if($rephtml==0)
- {
- $string = str_replace(array(' ','&','"','<','>','''), array(' ','&','"','<','>',"'"), $string);
- }
-
- $strcut = '';
- if(strtolower($ecms_config['sets']['pagechar']) == 'utf-8') {
-
- $n = $tn = $noc = 0;
- while($n < $strlen) {
-
- $t = ord($string[$n]);
- if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- $tn = 1; $n++; $noc++;
- } elseif(194 <= $t && $t <= 223) {
- $tn = 2; $n += 2; $noc += 2;
- } elseif(224 <= $t && $t < 239) {
- $tn = 3; $n += 3; $noc += 2;
- } elseif(240 <= $t && $t <= 247) {
- $tn = 4; $n += 4; $noc += 2;
- } elseif(248 <= $t && $t <= 251) {
- $tn = 5; $n += 5; $noc += 2;
- } elseif($t == 252 || $t == 253) {
- $tn = 6; $n += 6; $noc += 2;
- } else {
- $n++;
- }
-
- if($noc >= $length) {
- break;
- }
-
- }
- if($noc > $length) {
- $n -= $tn;
- }
-
- $strcut = substr($string, 0, $n);
-
- } else {
- for($i = 0; $i < $length; $i++) {
- $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
- }
- }
-
- if($rephtml==0)
- {
- $strcut = str_replace(array('&','"','<','>',"'"), array('&','"','<','>','''), $strcut);
- }
-
- return $strcut.$dot;
- }