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关于array_multisort多维数组排序的使用说明
Jan 04 PHP
php 文件缓存函数
Oct 08 PHP
php错误、异常处理机制(补充)
May 07 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
php cli换行示例
Apr 22 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
PHP中overload与override的区别
Feb 13 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 26 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递归实现无限分类 格式化数组的详解
2013/06/08 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
原生js轮播特效
2017/05/18 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
艾滋病宣传活动总结
2014/05/08 职场文书
董事会决议范本
2015/07/01 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
《去年的树》教学反思
2016/02/18 职场文书
入党申请书怎么写?
2019/06/21 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang