在输出文章标题的时候,由于框架宽度限制,我只能最多容许10个中文长度的标题出现
超出10个的话则以9个中文+ ..  表示,比如"一二三四五六七八九.."
我的函数体很简单,function doTitleLen($title, $len){
if(strlen($title) > $len){
$title = substr($title, 0, $len-2).'..';

}
return $title;
}假设len为10
然后传来的文章标题是
"一二三四五六七八九十1"
这样会导致最后一个字为乱码,因为substr里-2了,这是按照1个中文长度去减的
不知怎么解决这个BUG
strlen得出的是字节数,如何计算字数?
并且得到了字数后,有什么函数可以按照字符个数去截取,而不是字节数去截取的呢?

解决方案 »

  1.   

    编码不同,字节数也不同
    汉字的字节数:
    gbk 2
    utf-8 3
      

  2.   

    用mb_strlen()计算字符长度。
    用mb_substr()截取。注意指定编码。
      

  3.   

    在smarty模板用 {$name|truncate:10:“...”:true} 
    css也可以实现 .title{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
    你可以试一下
      

  4.   

    php有现成的函数。mb_strimwidth 这个函数比较好用。
    看看这篇文章吧。http://www.liveme.org/mb_strimwidth.html