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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 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自定义函数收代码
2010/08/01 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
python中的__slots__使用示例
2015/02/26 Python
PyMongo安装使用笔记
2015/04/27 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python requests使用socks5的例子
2019/07/25 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
python实现学生通讯录管理系统
2021/02/25 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
internal修饰符起什么作用
2013/12/16 面试题
JAVA软件工程师测试题
2014/07/25 面试题
员工自我鉴定
2013/10/09 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
吴仁宝观后感
2015/06/09 职场文书
企业催款函范本
2015/06/24 职场文书
大学生支教感言
2015/08/01 职场文书