• 技术文章 >后端开发 >php教程

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

    2016-06-07 17:18:59原创383

    估计不少玩smarty模板的小朋友都遇到过裁切乱码问题。特别是UTF8编码的。

    以下代码保存为modifier.truncate2.php 存到smarty libs下的plugin目录下

    然后裁剪的时候用$v->content|truncate2:100

    就搞定了。

    如果不好用可能是缓存导致,请速度删除templates_c下的缓存文件(小编搞的时候遇到缓存问题。)

    复制代码 代码如下:

    /**
    * Smarty plugin
    * @package Smarty
    * @subpackage plugins
    */


    /**
    * Smarty truncate modifier plugin
    *
    * Type: modifier

    * Name: truncate

    * 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
    * @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的插件体系还是比较智能而且容易修改的。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php smarty truncate乱码
    上一篇:Smarty局部缓存的几种方法简介_php实例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 手写PHP API框架(二)之Composer的安装使用• 手写PHP API框架(一)之PSR规范• 聊聊php怎么让Swoole/Pool进程池实现Redis持久连接• PHP原生类的总结分享• 聊聊PHP escapeshellarg函数使用的中文问题
    1/1

    PHP中文网