php smarty truncate UTF8乱码问题解决办法


Posted in PHP onJune 13, 2014

估计不少玩smarty模板的小朋友都遇到过裁切乱码问题。特别是UTF8编码的。

以下代码保存为modifier.truncate2.php 存到smarty libs下的plugin目录下

然后裁剪的时候用$v->content|truncate2:100

就搞定了。

如果不好用可能是缓存导致,请速度删除templates_c下的缓存文件(小编搞的时候遇到缓存问题。)

<?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://smarty.php.net/manual/en/language.modifier.truncate.php
 *          truncate (Smarty online manual)
 * @author   Monte Ohrt <monte at ohrt dot com>
 * @param string
 * @param integer
 * @param string
 * @param boolean
 * @param boolean
 * @return string
 */
function smarty_modifier_truncate2( $string,$length = 80,$etc='...',$count_words = true ) {
 return $returnstr =substr_utf8($string, 0, $length).$etc; 
}
function substr_utf8($str, $start=0, $length=-1, $return_ary=false) {
    $len = strlen($str);if ($length == -1) $length = $len;
    $r = array();
    $n = 0;
    $m = 0;
    for($i = 0; $i < $len; $i++) {
        $x = substr($str, $i, 1);
        $a = base_convert(ord($x), 10, 2);
        $a = substr('00000000'.$a, -8);
        if ($n < $start) {
            if (substr($a, 0, 1) == 0) {
            }elseif (substr($a, 0, 3) == 110) {
                $i += 1;
            }elseif (substr($a, 0, 4) == 1110) {
                $i += 2;
            }
            $n++;
        }else {
            if (substr($a, 0, 1) == 0) {
                $r[] = substr($str, $i, 1);
            }elseif (substr($a, 0, 3) == 110) {
                $r[] = substr($str, $i, 2);
                $i += 1;
            }elseif (substr($a, 0, 4) == 1110) {
                $r[] = substr($str, $i, 3);
                $i += 2;
            }else {
                $r[] = '';
            }
            if (++$m >= $length) {
                break;
            }
        }
    }
    return $return_ary ? $r : implode("",$r);
}
/* vim: set expandtab: */
?>

samrty的插件体系还是比较智能而且容易修改的。
PHP 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 #PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 #PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 #PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 #PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 #PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 #PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 #PHP
You might like
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
python 读取串口数据的示例
2020/11/09 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
班组长的岗位职责
2013/12/09 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
实习推荐信
2014/05/10 职场文书
护理专科学生自荐书
2014/07/05 职场文书
2014年宣传工作总结
2014/11/18 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript