Smarty模板扩展函数之 中文字符截取
时间:2006-07-30
来源:互联网
我是在做cms系统时碰到有这个需求的,一查文档,可以自己扩展函数,欣喜。
hbcms模板应用增加了截取函数 cn_truncate
函数目的:
1。在模板中直接截取中文字符
2。可保留原来的字符串style,如 font 等
用法:
cn_truncate 用法大致同官方的 truncate 函数,如下:
<{$item_info.title|cn_truncate:18:"...":true}>
第1个参数 18 表示截取 18 个汉字
第2个参数 ... 表示,如果多余18个汉字,则显示 ...
第3个参数 true 表示保留文字的初始颜色。 false 表示去掉颜色。
已知的BUG:
只做到了保留第一个style,而且有BUG(可查考源代码),请高手完善。
本函数的最新完善版本可在 http://hbcms.com/cms/template/ 中下载
源代码如下:
hbcms模板应用增加了截取函数 cn_truncate
函数目的:
1。在模板中直接截取中文字符
2。可保留原来的字符串style,如 font 等
用法:
cn_truncate 用法大致同官方的 truncate 函数,如下:
<{$item_info.title|cn_truncate:18:"...":true}>
第1个参数 18 表示截取 18 个汉字
第2个参数 ... 表示,如果多余18个汉字,则显示 ...
第3个参数 true 表示保留文字的初始颜色。 false 表示去掉颜色。
已知的BUG:
只做到了保留第一个style,而且有BUG(可查考源代码),请高手完善。
本函数的最新完善版本可在 http://hbcms.com/cms/template/ 中下载
源代码如下:
复制内容到剪贴板
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty truncate modifier plugin
*
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
* @link http://www.hbcms.com/
* @author http://www.hbcms.com/
* @param string
* @param integer
* @param string
* @param boolean $keep_first_style 是否保留第一个style
* @return string
* $keep_first_style 理解范例:
$s = '<A HREF="http://www.hbcms.com/"><FONT COLOR="red"><U><B>宏博<U>内容</U>管<B>理</B>系 统
<P>
<FONT SIZE="2" COLOR="blue">HBCMS</FONT> 是一个可以免费使用的内容管理系统,您甚至可以用<A HREF="http://www.hbcms.com/">她来做商业网站</A>。点这里查看详细版权说明
<BR> <BR>
是否有错误
<HR>
已知bug,截取:<FONT SIZE="2" COLOR="blue">乌木乌木乌<U>木乌木</U>乌木乌木乌木乌木乌木</font>有异常
<P>
希望大家改善</B></U></FONT></A>';
echo $s . '<hr><HR><HR>smarty_modifier_cn_truncate:<HR>';
echo smarty_modifier_cn_truncate($s,30,'。。。',1);
exit();
*/
function smarty_modifier_cn_truncate($string, $strlen = 20, $etc = '...',
$keep_first_style = false)
{
$strlen = $strlen*2;
$string = trim($string);
if ( strlen($string) <= $strlen ) {
return $string;
}
$str = strip_tags($string);
$j = 0;
for($i=0;$i<$strlen;$i++) {
if(ord(substr($str,$i,1))>0xa0) $j++;
}
if($j%2!=0) $strlen++;
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen ) {$rstr .= $etc;}
if ( $keep_first_style == true && ereg('^<(.*)>$',$string) ) {
if ( strlen($str) <= $strlen ) {
return $string;
}
$start_pos = strpos($string,substr($str,0,4));
$end_pos = strpos($string,substr($str,-4));
$end_pos = $end_pos+4;
$rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
}
return $rstr;
}
/* vim: set expandtab: */
?>
[ 本帖最后由 hbcms 于 2006-7-30 15:52 编辑 ] 代码:
<?php/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty truncate modifier plugin
*
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
* @link http://www.hbcms.com/
* @author http://www.hbcms.com/
* @param string
* @param integer
* @param string
* @param boolean $keep_first_style 是否保留第一个style
* @return string
* $keep_first_style 理解范例:
$s = '<A HREF="http://www.hbcms.com/"><FONT COLOR="red"><U><B>宏博<U>内容</U>管<B>理</B>系 统
<P>
<FONT SIZE="2" COLOR="blue">HBCMS</FONT> 是一个可以免费使用的内容管理系统,您甚至可以用<A HREF="http://www.hbcms.com/">她来做商业网站</A>。点这里查看详细版权说明
<BR> <BR>
是否有错误
<HR>
已知bug,截取:<FONT SIZE="2" COLOR="blue">乌木乌木乌<U>木乌木</U>乌木乌木乌木乌木乌木</font>有异常
<P>
希望大家改善</B></U></FONT></A>';
echo $s . '<hr><HR><HR>smarty_modifier_cn_truncate:<HR>';
echo smarty_modifier_cn_truncate($s,30,'。。。',1);
exit();
*/
function smarty_modifier_cn_truncate($string, $strlen = 20, $etc = '...',
$keep_first_style = false)
{
$strlen = $strlen*2;
$string = trim($string);
if ( strlen($string) <= $strlen ) {
return $string;
}
$str = strip_tags($string);
$j = 0;
for($i=0;$i<$strlen;$i++) {
if(ord(substr($str,$i,1))>0xa0) $j++;
}
if($j%2!=0) $strlen++;
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen ) {$rstr .= $etc;}
if ( $keep_first_style == true && ereg('^<(.*)>$',$string) ) {
if ( strlen($str) <= $strlen ) {
return $string;
}
$start_pos = strpos($string,substr($str,0,4));
$end_pos = strpos($string,substr($str,-4));
$end_pos = $end_pos+4;
$rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
}
return $rstr;
}
/* vim: set expandtab: */
?>
作者: hbcms 发布时间: 2006-07-30
不错,很有用
作者: xiaojia 发布时间: 2006-08-24
是啊 ,我也遇到类似问题,只好用css来控制
作者: leobyrds 发布时间: 2006-09-19
想发图片割好的代码,发现不行,郁闷,只好回文本的
复制内容到剪贴板
$strcut = '';
if(strlen($string) > $length) {
for($i = 0; $i < $length - 3; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
return $strcut.' ...';
}
else {
return $string;
}
}
代码少多了吧! 代码:
function cutstr($string, $length) {$strcut = '';
if(strlen($string) > $length) {
for($i = 0; $i < $length - 3; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
return $strcut.' ...';
}
else {
return $string;
}
}
作者: phpvista 发布时间: 2006-10-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28