php smarty truncate UTF8乱码问题解决办法

 更新时间:2014年06月13日 09:35:05   投稿:junjie  
这篇文章主要介绍了php smarty truncate UTF8乱码问题解决办法,需要的朋友可以参考下

估计不少玩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的插件体系还是比较智能而且容易修改的。

相关文章

  • centos 7系统下安装laravel运行环境的步骤详解

    centos 7系统下安装laravel运行环境的步骤详解

    Laravel框架对于开发网页应用来说是一个绝好的的工具,最近正好又在学习linux系统,所以下面这篇文章主要给大家介绍了在centos 7系统下安装laravel运行环境的步骤,需要的朋友可以参考借鉴,下面跟着小编来一起学习学习吧。
    2017-08-08
  • php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)

    php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)

    这篇文章主要为大家详细介绍了php微信高级接口调用方法,包括自定义菜单接口、客服接口、二维码等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • PHP发送AT指令实例代码

    PHP发送AT指令实例代码

    这篇文章主要介绍了PHP发送AT指令实例代码的相关资料,非常不错具有参考借鉴价值,需要的朋友一起看看吧
    2016-05-05
  • PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)

    PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)

    今天接到了一个从Excel内读取图片的需求,这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能,感兴趣的朋友一起看看吧
    2019-11-11
  • PHP框架laravel的.env文件配置教程

    PHP框架laravel的.env文件配置教程

    在之前的版本 Laravel 是使用 config 文件夹下的 php 文件来完成项目所需要的配置的,后面从大概从 5 开始就使用了 .env 来放置部分配置。那么下面这篇文章主要给大家介绍了关于PHP框架laravel的.env文件配置的相关资料,需要的朋友可以参考学习。
    2017-06-06
  • PHP-Java-Bridge使用笔记

    PHP-Java-Bridge使用笔记

    这是我在做平安银行开发的时候,本地使用PHP环境,平安银行接口为Java接口的时候,采用PHP-Java-Bridge的方式调用接口的笔记。因为现在网上的教程基本上都不行了,所以在这里贴出我能使用的而且目前网上最新的版本(2014-09-19),如果有错,请通过邮件联系,谢谢。
    2014-09-09
  • Win7下手动安装apache2.2、php5.4笔记

    Win7下手动安装apache2.2、php5.4笔记

    这篇文章主要介绍了Win7下手动安装apache2.2、php5.4笔记,本文是个人手动操作记录,需要的朋友可以参考下
    2015-04-04
  • php无法连接mysql数据库的正确解决方法

    php无法连接mysql数据库的正确解决方法

    这篇文章主要为大家详细介绍了php无法连接mysql数据库的正确解决方法,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • PHP htmlspecialchars() 函数实例代码及用法大全

    PHP htmlspecialchars() 函数实例代码及用法大全

    这篇文章主要介绍了PHP htmlspecialchars() 函数实例代码及用法大全,需要的朋友可以参考下
    2018-09-09
  • PHP安装扩展mcrypt以及相关依赖项深入讲解

    PHP安装扩展mcrypt以及相关依赖项深入讲解

    这篇文章主要介绍了PHP安装扩展mcrypt以及相关依赖项深入讲解,步骤讲解的很清晰,有需要的同学可以研究下
    2021-03-03

最新评论