解决方案 »

  1.   

    substr是按字节切的,但utf-8和gbk的中文都是多字节,最后一个字切了一半就乱码了
    用mb_substr试试
      

  2.   

    substr会把中文字符强制截断,从而乱码,不知道你是不是这个原因,可以试下mb_substr!另外,你这个问题可以用css来解决定好现实区域,然后设置超出省略overflow: hidden;text-overflow: ellipsis;
      

  3.   

    好像不行,是不是gbk的在计算文字的时候会不会把$content的样式也算进来啊!
    比如:<? if(strlen($content)<=90){?><?=$content;?><? }else{echo substr($content ,0,90)."...";}?>,要是$contentde 文字不到45个的话没有问题,只要超过45个,怎么就只显示两三个字,然后就不显示啦!查看源代码,就会在内容的前面有很多样式的代码(<p><font style="····">内容··········内容</font></p>)这样的,这个是不是要在显示的时候再删除样式啊什么的?
      

  4.   

    你需要的是先将所有的html标签去除后再截取,截取的时候还要区分是否带有中文。
      

  5.   


    $res = mb_substr('针对中文',0,2,'uft8');
      

  6.   

    看看这个讨论 http://bbs.csdn.net/topics/340260333
      

  7.   


    怎么去掉在截取啊?过滤HTML标签采用的函数式strip_tags这个是PHP自带的,要是你想要做更全面的过滤就需要自己去写正则来匹配去除,但是如果要求不高的话一般采用这个函数就可以了,然后你再判断长度,然后再截取。
      

  8.   


    /**
     *   实现中文字串截取无乱码的方法
     */
    function getSubstr($string, $start, $length) {
        $string=strip_tags($string);
            if(mb_strlen($string,'utf-8')>$length){
                $str = mb_substr($string, $start, $length,'utf-8'); 
                return $str.'...';
            }else{
                    return $string;
            }
    }