扩展smarty,自己新建一个文件,写个函数,放在 plugins/目录下
修改后的smartTruncate: 文件名:modifier.smartTruncate.php 内容如下:
<?php function smarty_modifier_smartTruncate($string, $length = 80, $etc = '...',$break_words = false, $middle = false) { if ($length == 0) return ''; if (smartStrlen($string) > $length) { $length -= smartStrlen($etc); if (!$break_words && !$middle) { $string = preg_replace('/\s+?(\S+)?$/', '', smartSubstr($string, 0, $length+1)); } if(!$middle) { return smartSubstr($string, 0, $length).$etc; } else { return smartSubstr($string, 0, $length/2) . $etc . smartSubstr($string, -$length/2); } } else { return $string; } } function smartDetectUTF8($string) { static $result = array(); if(! array_key_exists($key = md5($string), $result)) { $utf8 = " /^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 )+$/xs "; $result[$key] = preg_match(trim($utf8), $string); } return $result[$key]; } function smartStrlen($string) { $result = 0; $number = smartDetectUTF8($string) ? 3 : 2; for($i = 0; $i < strlen($string); $i += $bytes) { $bytes = ord(substr($string, $i, 1)) > 127 ? $number : 1; $result += $bytes > 1 ? 1.0 : 0.5; } return $result; } function smartSubstr($string, $start, $length = null) { $result = ''; $number = smartDetectUTF8($string) ? 3 : 2; if($start < 0) { $start = max(smartStrlen($string) + $start, 0); } for($i = 0; $i < strlen($string); $i += $bytes) { if($start <= 0) { break; } $bytes = ord(substr($string, $i, 1)) > 127 ? $number : 1; $start -= $bytes > 1 ? 1.0 : 0.5; } if(is_null($length)) { $result = substr($string, $i); } else { for($j = $i; $j < strlen($string); $j += $bytes) { if($length <= 0) { break; } if(($bytes = ord(substr($string, $j, 1)) > 127 ? $number : 1) > 1) { if($length < 1.0) { break; } $result .= substr($string, $j, $bytes); $length -= 1.0; } else { $result .= substr($string, $j, 1); $length -= 0.5; } } } return $result; }
相关推荐
smarty truncate中文乱码解决
//如果有中文则减去中文的个数 function smarty_modifier_truncate($string, $sublen = 80, $etc = '...', $break_words = false, $middle = false)
主要介绍了smarty中英文多编码字符截取乱码问题解决方法,涉及到对原有smartTruncate的修改,非常具有实用价值,需要的朋友可以参考下
本篇文章是对smarty 截取字符串函数 truncate的用法进行了详细的分析介绍,需要的朋友参考下
中文版和中英文结合版smarty中英文结合版
smarty中的字符串截取不支持中文,总是破字,这个小插件可以帮你解决这个问题,他可不破字截取中文汉字,内有使用方法,可以像一般的变量调节器一样使用
计算机前端-核心编程. Smarty16truncate调节器.mp4
一般网站页面的显示都不可避免的会涉及子字符串的截取,这个时候truncate就派上用场了,但是它只适合英文用户,对与中文用户来说,使用 truncate会出现乱码
主要介绍了php smarty truncate UTF8乱码问题解决办法,需要的朋友可以参考下
主要介绍了smarty模板中拼接字符串的方法,需要的朋友可以参考下
比如今天我们说的截取字符串函数,在thinkphp模板引擎里可以这样写:{$vo.title|msubstr=0,5,’utf-8′,false} 至于{$vo.title}这个大家肯定不陌生了。就说说后边的函数msubstr吧。它代表的意思是截取字符串$vo....
smarty中文手册smarty中文手册smarty中文手册smarty中文手册smarty中文手册smarty中文手册smarty中文手
以前从网上找到的一个smarty模板的中文截取函数cn_truncate,原来的实现方法有几个bug,我对它基本上重写了一遍。不过实现的功能和思想还是借鉴原来函数的。最重要的是解决了中英文混合时候的截取计算长度的问题。...
SMARTY中文模板手册
smarty完全中文手册
本篇文章是对smarty基础中的拼接字符串进行了详细的分析介绍,需要的朋友参考下
缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,...
spacify是在字符串的每个字符之间插入空格或者其他的字符串. 参数表示将在两个字符之间插入的字符串,默认为一个空格。 string_format 字符串格式化 strip 去除(多余空格) strip_tags 去除所有html标签 truncate ...
Smarty3 中文手册
truncate [截取] upper [大写] wordwrap [行宽约束] 6. Combining Modifiers [组合修改器] 7. Built-in Functions [内建函数] capture config_load foreach,foreachelse include include_php insert if,...