smarty 關於truncate使用的問題
{$d.title|truncate:25}
我想這樣讓多餘的標題以...顯示
只是truncate好像是把數字、各種字元、中文一樣當做1個字元
但數字畢竟佔2個才佔一個中文的空間,而且有末尾的“...”,又佔了3個字元的空間。
導致標題列出後層次不齊。
數字多的顯示很短,中文多的又會顯示很長。
如何讓truncate認為數字也是半個字元呢?
希望高手、老鳥指教,多謝!
------解決方案--------------------
為什麼不在PHP裡處理這些呢?幫頂
------解決方案--------------------
自訂截取中文的函數。
------解決方案--------------------
唉 才20分
將以下code儲存為modifier.mb_truncate.php,將此php放入smarty下面的libs/plugins目錄下
使用方法:{$d.title|mb_truncate:25}
PHP code
function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $charset='UTF-8', $break_words = false, $middle = false){ if ($length == 0) return ''; if (mb_strlen($string) > $length) { $length -= min($length, mb_strlen($etc)); if (!$break_words && !$middle) { $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length+1, $charset)); } if(!$middle) { return mb_substr($string, 0, $length, $charset) . $etc; } else { return mb_substr($string, 0, $length/2, $charset) . $etc . mb_substr($string, -$length/2, (mb_strlen($string)-$length/2), $charset); } } else { return $string; }}