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 smarty的预保留变量总结
Dec 04 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP的加密方式及原理
Jun 14 PHP
php模板函数 正则实现代码
Oct 15 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php中的观察者模式简单实例
Jan 20 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
Aug 23 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
PHP实现一个简单url路由功能实例
Nov 05 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/07/14 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
菜单效果
2006/10/14 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
用js实现in_array的方法
2013/11/05 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
python批量生成条形码的示例
2020/10/10 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
Eclipse面试题
2014/03/22 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
镇创先争优活动总结
2014/08/28 职场文书
个人查摆剖析材料
2014/10/04 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
晶体管单管来复再生式收音机
2021/04/22 无线电
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏