|
我们知道,smarty模板的truncate支持单字符和双字符的截断,这对于使用gbk或者big5的数据来说真是一个幸福。
但如果是使用utf-8编码的中文呢,utf-8中文使用到3个byte的空间来存储一个中文,这样子truncate修饰器截断的中文就可能导致“破碎的残块”,出现“?”符号。
为了不影响原来truncate的功能,我增加了truncate_utf8修饰器解决了这个问题。其原理是通过regex对utf-8编码标准的解析达到正确截断的目的。
- function smarty_modifier_truncate_utf8($string, $length = 80, $etc = '...',
- $break_words = false, $middle = false)
- {
- if ($length == 0)
- return '';
- if (strlen($string) > $length) {
- $sPatten = '/(?:[\xe0-\xef][\x80-\xbf]?|[\xc0-\xcf])$/' ;
- $length -= strlen($etc);
- if (!$break_words && !$middle) {
- $string = preg_replace( $sPatten, '', substr($string, 0, $length ) );
- }
- if(!$middle) {
- return substr( $string, 0, $length ) . $etc;
- } else {
- return preg_replace( $sPatten, '', substr($string, 0, $length/2 ) ) . $etc . preg_replace( $sPatten, '', substr($string, 0, -$length/2 ) );
- }
- } else {
- return $string;
- }
- }
复制代码 |
评分
-
1
查看全部评分
-
|