本帖最后由 chzhdy 于 2010-08-17 10:30:36 编辑

解决方案 »

  1.   

    mb_strlen  判断长度mb_substr 截断字符串页面换行,通常用 <br />
      

  2.   

    页面输出,定义好css就行,定死20个字符,中英文混杂的时候,显示长度是不一样的但是css不能解决连续的一长串英文字母换行的问题【可以强制超出隐藏】取舍在于你的需求。
      

  3.   

    用mb_substr,mb_strlen可以处理中英混杂的情况。
      

  4.   

    问题远没有那么简单!
    mb_substr 只能保证多字节字符不被切断,并不能满足美观上的需求比如在浏览器上观看时
    两个小写字母与一个中文字等宽
    三个大写字母与两个中文字等宽
      

  5.   


    MMM
    好了
    mmm
    好了好像没有吧?
      

  6.   

    给你一个方法:
    /*
     * 截取字符串
     */
    function substrs($oStr,$length,$long=false){
    mb_internal_encoding('utf-8');
    if($length && mb_strlen($oStr)>($length)){
    $word=0.0;
    while($word<$length){
    if(ord($oStr[$i])>128){
    $i+=strlen('中');
    $word+=1.0;
    }else{
    $i+=1;
    $word+=1.0;
    $length+=0.5;
    }
    }
    if(mb_strlen($oStr)>($length)){
    if($long){
    $str=mb_substr($oStr,0,intval($length+0.5));
    }else{
    $str=mb_substr($oStr,0,intval($length));
    }
    return $str.'..';
    }else{
    return $oStr;
    }
    }else{
    return $oStr;
    }
    }
      

  7.   


    .overword {
      overflow:hidden;white-space:normal; width:175px;word-break:break-all;
    }
    用Css吧,方便好用
      

  8.   

    同意楼上的,用 CSS 比较方便
      

  9.   

    mb_substr 截断字符串页面换行,通常用 <br />加上一点适当的算法就OK了
      

  10.   

    function mb_highlight($data, $query, $ins_before, $ins_after)
    {
     $result = '';
     while (($poz = mb_strpos(mb_strtolower($data), mb_strtolower($query))) !== false)
     {
           $query_len = mb_strlen ($query);
           $result .= mb_substr ($data, 0, $poz).
                   $ins_before.
                   mb_substr ($data, $poz, $query_len).
                   $ins_after;
           $data = mb_substr ($data, $poz+$query_len);
     }
     return $result;
    }
    ?>mb_substr(string,start,length,Uncoding)
      

  11.   

    在 PHP 的手册上查到 mb_strlen 的返回值定义里说:
    ... A multi-byte character is counted as 1.
    就是说,一个中文字符会统计为“1个”,跟一个英文字母是同等对待的。楼主没有说的很清楚,不过一般提这类问题的背景都是为了达到指定显示宽度的目的,而一个中文字符的显示宽度大约相当于两个英文字母,也就是说实际的要求一般应该是“每行20个中文字或者40个ASCII字符”。如果是这样的话,楼上用 mb_strlen 的方法就不好使了。————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  12.   

    mb_substr肯定不行的,以前试过网上去搜一个吧,有别人写过的和java一样的substring