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 相关文章推荐
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
PHP 强制下载文件代码
Oct 24 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 PHP
linux下安装php的memcached客户端
Aug 03 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
php判断当前操作系统类型
Oct 28 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
PHP简单日历实现方法
2016/07/20 PHP
如何防止JavaScript自动插入分号
2015/11/05 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
python代码编写计算器小程序
2020/03/30 Python
flask 实现token机制的示例代码
2019/11/07 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
Python加速程序运行的方法
2020/07/29 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
学生就业推荐信
2013/11/13 职场文书
高二化学教学反思
2014/01/30 职场文书
高中打架检讨书
2014/02/13 职场文书
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python