smarty中改进truncate使其支持中文的方法


Posted in PHP onMay 30, 2016

本文实例讲述了smarty中改进truncate使其支持中文的方法。分享给大家供大家参考,具体如下:

smarty的truncate不支持中文的截取。将smarty目录下plugins中的modifier.truncate.php改成下面这个样子就可以了

<?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程序设计有所帮助。

PHP 相关文章推荐
随机广告显示(PHP函数)
Oct 09 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
PHP多进程编程实例
Oct 15 PHP
thinkphp模板继承实例简述
Nov 26 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
php实现的一段简单概率相关代码
May 30 #PHP
PHP中的表达式简述
May 29 #PHP
一个简单的php路由类
May 29 #PHP
解读PHP中上传文件的处理问题
May 29 #PHP
round robin权重轮循算法php实现代码
May 28 #PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 #PHP
php获取一定范围内取N个不重复的随机数
May 28 #PHP
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP中如何定义和使用常量
2013/02/28 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
详解python配置虚拟环境
2019/04/08 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
使用pandas读取文件的实现
2019/07/31 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Django app配置多个数据库代码实例
2019/12/17 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
J2EE包括哪些技术
2016/11/25 面试题
酒店销售经理岗位职责
2014/01/31 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
2014年医生工作总结
2014/11/21 职场文书
大学军训决心书
2015/02/05 职场文书
纪委立案决定书
2015/06/24 职场文书
大学生支教感言
2015/08/01 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android