讓 Smarty 的 truncate 支援 utf-8
我用 PHP 搭配 Smarty template engine 時 習慣搭配 truncate 或 date_format 等 smarty 內建函數 方便日後設計人員可更改 這樣也可讓邏輯端的程式精簡些 有好一陣子沒用 Smarty 了 最近在翻閱之前的作品參考 突然看到用 utf-8 編碼格式的怎麼突然會有亂碼 先將 Smarty 版本更新到目前最新的 2.6.18 然後清掉 compile 的 cache 檔 情形還是一樣 在網路上搜尋後發現有不少教學文 大多都是自己加個 plugin 然後將呼叫 truncate 的函式改為 truncate_utf8 之類的 以下為這支 plugin: // http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php /** * UTF8 helper functions * * @license LGPL (http://www.gnu.org/copyleft/lesser.html) * @author Andreas Gohr */ if(! defined ( 'UTF8_MBSTRING' )){ if( function_exists ( 'mb_substr' ) && ! defined ( 'UTF8_NOMBSTRING' )){ define ( 'UTF8_MBSTRING' , 1 ); }else{ define ( 'UTF8_MBSTRING' , 0 ); } } if( UTF8_MBSTRING ){ mb_internal_encoding ( 'UTF-8' ); } function utf8_strlen ( $string ){ return strlen ( utf8_decode ( $string )); } function utf8_substr ( $str , $offset , $length = null ) { if( UTF8_MBSTRING ){ if( $length === null ){ return mb_