让smarty完全支持中文,truncate修饰器改造
我们知道,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]