本文实例讲述了smarty中改进truncate使其支持中文的方法。分享给大家供大家参考,具体如下:
smarty的truncate不支持中文的截取。将smarty目录下plugins中的modifier.truncate.php改成下面这个样子就可以了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php /* * Smarty plugin * ------------------------------------------------------------- * Type: modifier * Name: truncate * Purpose: Truncate a string to a certain length if necessary, * optionally splitting in the middle of a word, and * appending the $etc string. * Update: change substr to msubstr and add fun msubstr.so it * can bu used in chinese charset. * ------------------------------------------------------------- */ function smarty_modifier_truncate( $string , $length = 80, $etc = '...' , $break_words = false) { if ( $length == 0) return '' ; if ( strlen ( $string ) > $length ) { $length -= strlen ( $etc ); if (! $break_words ) $string = preg_replace( '//s+?(/S+)?$/' , '' , SubstrGB( $string , 0, $length +1)); return SubstrGB( $string , 0, $length ). $etc ; } else return $string ; } function SubstrGB( $str , $start , $len ){ for ( $i =0; $i < $start + $len ; $i ++){ $tmpstr =(ord( $str [ $i ])>=161 && ord( $str [ $i ])<=254&& ord( $str [ $i +1])>=161 && ord( $str [ $i +1])<=254)? $str [ $i ]. $str [++ $i ]: $tmpstr = $str [ $i ]; if ( $i >= $start && $i <( $start + $len )) $tmp .= $tmpstr ; } return $tmp ; } /* vim: set expandtab: */ ?> |
希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。