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的5个入手程序
Nov 23 PHP
初品cakephp 入门基础
Feb 16 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
php实现文件管理与基础功能操作
Mar 21 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 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面试题集锦
2012/03/08 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
vue项目上传Github预览的实现示例
2018/11/06 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
Python对数据库操作
2016/03/28 Python
Python实现调度算法代码详解
2017/12/01 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python向图片里添加文字
2019/11/26 Python
python opencv进行图像拼接
2020/03/27 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
python爬取youtube视频的示例代码
2021/03/03 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
草船借箭教学反思
2014/02/03 职场文书
市场推广策划方案
2014/06/02 职场文书
高中教师个人工作总结
2015/02/10 职场文书
十月围城观后感
2015/06/08 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书