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 相关文章推荐
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
php socket方式提交的post详解
Jul 19 PHP
php获取某个目录大小的代码
Sep 10 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
WHOOPS PHP调试库的使用
Sep 29 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英文字母大小写转换函数小结
2014/05/03 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php通过session防url攻击方法
2014/12/10 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
深入学习python多线程与GIL
2019/08/26 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
优秀党员推荐材料
2014/12/18 职场文书
合作与交流自我评价
2015/03/09 职场文书
2015国庆节感想
2015/08/04 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL