当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-02-19 11:50:07 浏览: 评论:0 

这篇文章主要介绍了php smarty truncate UTF8乱码问题解决办法,需要的朋友可以参考下。

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

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

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

就搞定了。

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

  1. <?php 
  2. /** 
  3.  * Smarty plugin 
  4.  * @package Smarty 
  5.  * @subpackage plugins 
  6.  */ 
  7.  
  8.  
  9. /** 
  10.  * Smarty truncate modifier plugin 
  11.  * 
  12.  * Type:     modifier<br> 
  13.  * Name:     truncate<br> 
  14.  * Purpose:  Truncate a string to a certain length if necessary, 
  15.  *           optionally splitting in the middle of a word, and 
  16.  *           appending the $etc string or inserting $etc into the middle. 
  17.  * @link http://smarty.php.net/manual/en/language.modifier.truncate.php 
  18.  *          truncate (Smarty online manual) 
  19.  * @author   Monte Ohrt <monte at ohrt dot com> 
  20.  * @param string 
  21.  * @param integer 
  22.  * @param string 
  23.  * @param boolean 
  24.  * @param boolean 
  25.  * @return string 
  26.  */ 
  27. function smarty_modifier_truncate2( $string,$length = 80,$etc='...',$count_words = true ) { 
  28.  return $returnstr =substr_utf8($string, 0, $length).$etc
  29.  
  30.  
  31. function substr_utf8($str$start=0, $length=-1, $return_ary=false) { 
  32.     $len = strlen($str);if ($length == -1) $length = $len
  33.     $r = array(); 
  34.     $n = 0; 
  35.     $m = 0; 
  36.  
  37.     for($i = 0; $i < $len$i++) { 
  38.         $x = substr($str$i, 1); 
  39.         $a = base_convert(ord($x), 10, 2); 
  40.         $a = substr('00000000'.$a, -8); 
  41.         if ($n < $start) { 
  42.             if (substr($a, 0, 1) == 0) { 
  43.             }elseif (substr($a, 0, 3) == 110) { 
  44.                 $i += 1; 
  45.             }elseif (substr($a, 0, 4) == 1110) { 
  46.                 $i += 2; 
  47.             } 
  48.             $n++; 
  49.         }else { 
  50.             if (substr($a, 0, 1) == 0) { 
  51.                 $r[] = substr($str$i, 1); 
  52.             }elseif (substr($a, 0, 3) == 110) { 
  53.                 $r[] = substr($str$i, 2); 
  54.                 $i += 1; 
  55.             }elseif (substr($a, 0, 4) == 1110) { 
  56.                 $r[] = substr($str$i, 3); 
  57.                 $i += 2; 
  58.             }else { 
  59.                 $r[] = ''
  60.             } 
  61.             if (++$m >= $length) { 
  62.                 break
  63.             } 
  64.         } 
  65.     } 
  66.  
  67.     return $return_ary ? $r : implode("",$r); 
  68. /* vim: set expandtab: */ 
  69. ?> 

samrty的插件体系还是比较智能而且容易修改的。

Tags: smarty truncate UTF8乱码

分享到: