如题。有知道的指点谢谢。

解决方案 »

  1.   

    这是PHP的问题,truncate使用的是strlen/substr实现的所以不支持中文
      

  2.   

    我帮你解决了,写了一个Smarty的modifier插件,文件名是modifier.mb_truncate.php,放到Smarty的插件目录下
    文件内容是:<?phpfunction smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $encoding='UTF-8',
                                      $break_words = false, $middle = false)
    {
        if ($length == 0)
            return '';    if (mb_strlen($string, $encoding) > $length) {
            $length -= min($length, mb_strlen($etc));
            if (!$break_words && !$middle) {
                $string = mb_ereg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1));
            }
            if(!$middle) {
                return mb_substr($string, 0, $length) . $etc;
            } else {
                return mb_substr($string, 0, $length/2) . $etc . mb_substr($string, -$length/2);
            }
        } else {
            return $string;
        }
    }?>使用的时候是这样的{'afdasbdf中国管理手段建立分级分类阿斯顿发了点积分历史记录法律发发牢骚'|mb_truncate:15:'...':'CP936'}
    结果是:
    afdasbdf中国...如果你的PHP文件编码是utf8,把上面的CP936换成UTF-8就可以了!!!PS. 这个插件是我修改内置的truncate得出的!
      

  3.   

    {'afdasbdf中国管理手段建立分级分类阿斯顿发了点积分历史记录法律'|mb_truncate:15:'...':'CP936'} 
      

  4.   

    substr() 换成mb_substr() 就行了,要开启扩展.mb_string