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中拷贝构造函数、赋值运算符重载
Jul 25 PHP
深入php self与$this的详解
Jun 08 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
非常实用的php验证码类
May 15 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
php自动载入类用法实例分析
2016/06/24 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
js 居中漂浮广告
2010/03/21 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python中遍历文件的3个方法
2014/09/02 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Django如何实现上传图片功能
2019/08/16 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
python如何绘制疫情图
2020/09/16 Python
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
什么是方法的重载
2013/06/24 面试题
工程师自我评价怎么写
2013/09/19 职场文书
HR喜欢的自荐信格式
2013/10/08 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
社团个人总结范文
2015/03/05 职场文书
创业计划书之服装
2019/10/07 职场文书