zl程序教程

您现在的位置是:首页 >  其它

当前栏目

phpsmartytruncateUTF8乱码问题解决办法

问题 乱码 解决办法
2023-06-13 09:15:28 时间

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

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

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

就搞定了。

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

复制代码代码如下:

<?php
/**
 *Smartyplugin
 *@packageSmarty
 *@subpackageplugins
 */

 
/**
 *Smartytruncatemodifierplugin
 *
 *Type:    modifier<br>
 *Name:    truncate<br>
 *Purpose: Truncateastringtoacertainlengthifnecessary,
 *          optionallysplittinginthemiddleofaword,and
 *          appendingthe$etcstringorinserting$etcintothemiddle.
 *@linkhttp://smarty.php.net/manual/en/language.modifier.truncate.php
 *         truncate(Smartyonlinemanual)
 *@author  MonteOhrt<monteatohrtdotcom>
 *@paramstring
 *@paraminteger
 *@paramstring
 *@paramboolean
 *@paramboolean
 *@returnstring
 */
functionsmarty_modifier_truncate2($string,$length=80,$etc="...",$count_words=true){
 return$returnstr=substr_utf8($string,0,$length).$etc;

}

functionsubstr_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:setexpandtab:*/
?>

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