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 header示例代码(推荐)
Sep 08 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
PHP session_start()问题解疑(详细介绍)
Jul 05 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
php超快高效率统计大文件行数
Jul 05 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
php判断数组是否为空的实例方法
May 10 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
优化PHP代码技巧的小结
2013/06/02 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
详解Python中的__init__和__new__
2014/03/12 Python
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python类反射机制使用实例解析
2019/12/30 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
追悼会主持词
2014/03/20 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python