java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

php smarty模板UTF8 truncate 乱码解决

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

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

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

就搞定了。

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


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


This entry was posted in PHP and tagged , , , , , , , , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/smarty-truncate-code/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

4 Responses to php smarty模板UTF8 truncate 乱码解决

  1. 很努力的看完了,貌似没怎么看懂···水平不够

  2. 屠龙 says:

    看懂一部分了,对代码还有有点研究的

Leave a Reply