建议先用 strip_tags() 把 html 过滤掉再做截取

解决方案 »

  1.   

    function slen($str,$count) {
    if (isset($str) && !empty($str)){
    $str = substr($str, 0, $count).chr(0);
    return $str;
    }else{
    return "";
    }
    }
      

  2.   

    function mysubstr($str, $start, $len) {
            $tmpstr = "";
            $strlen = $start + $len;
            for($i = 0; $i < $strlen; $i++) {
                      if(ord(substr($str, $i, 1)) > 0xa0) {
                                $tmpstr .= substr($str, $i, 2);
                                $i++;
                      } else
                                $tmpstr .= substr($str, $i, 1);
            }
            return $tmpstr;
    }
      

  3.   

    function utf8Substr($str, $from, $len)
    {
            return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                                                          '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                                                          '$1',$str);
    }
      

  4.   

    function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') 

            if($code == 'UTF-8') 
            { 
    $pa="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|";
    $pa.="\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; 
                      preg_match_all($pa, $string, $t_string); 
       
                      if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 
                      return join('', array_slice($t_string[0], $start, $sublen)); 
            } 
            else 
            { 
                      $start = $start*2; 
                      $sublen = $sublen*2; 
                      $strlen = strlen($string); 
                      $tmpstr = ''; 
       
                      for($i=0; $i<$strlen; $i++) 
                      { 
                                if($i>=$start && $i<($start+$sublen)) 
                                { 
                                          if(ord(substr($string, $i, 1))>129) 
                                          { 
                                                    $tmpstr.= substr($string, $i, 2); 
                                          } 
                                          else 
                                          { 
                                                    $tmpstr.= substr($string, $i, 1); 
                                          } 
                                } 
                                if(ord(substr($string, $i, 1))>129) $i++; 
                      } 
                      if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; 
                      return $tmpstr; 
            } 

       
    $str = "abcd需要截取的字符串"; 
    echo cut_str($str, 8, 0, 'gb2312'); 
      

  5.   

    /** 
       * @package           BugFree 
       * @version           $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ 
       * 
       * 
       * Return part of a string(Enhance the function substr()) 
       * 
       * @author                                             Chunsheng Wang <[email protected]
       * @param string     $String     the string to cut. 
       * @param int              $Length     the length of returned string. 
       * @param booble     $Append     whether append "...": false|true 
       * @return string                             the cutted string. 
       */ 
    function sysSubStr($String,$Length,$Append = false) 

            if (strlen($String) <= $Length ) 
            { 
                      return $String; 
            } 
            else 
            { 
                      $I = 0; 
                      while ($I < $Length) 
                      { 
                                $StringTMP = substr($String,$I,1); 
                                if ( ord($StringTMP) >=224 ) 
                                { 
                                          $StringTMP = substr($String,$I,3); 
                                          $I = $I + 3; 
                                } 
                                elseif( ord($StringTMP) >=192 ) 
                                { 
                                          $StringTMP = substr($String,$I,2); 
                                          $I = $I + 2; 
                                } 
                                else 
                                { 
                                          $I = $I + 1; 
                                } 
                                $StringLast[] = $StringTMP; 
                      } 
                      $StringLast = implode("",$StringLast); 
                      if($Append) 
                      { 
                                $StringLast .= "..."; 
                      } 
                      return $StringLast; 
            } 

       
    $String = "CodeBit.cn -- 简单、精彩、通用"; 
    $Length = "18"; 
    $Append = false; 
    echo sysSubStr($String,$Length,$Append); 
      

  6.   

    yzxlyd
    刘懿东大猪头大哥,你随便COPY些代码来干吗啊?那些代码你知道是什么意思吗? 我晕,拿这里当百度贴吧了,以为随便复制点东西就能拿分。shagoo 
    我是想写一个BLOG程序,但是把HTM或者UBB过滤了,就显示不出贴图了。
    我的意思是一个正则 <*> 或者 [*], 把这些内容显示出来,并且不算进字符串的统计里。
      

  7.   

    试试这个8
    O.ohttp://www.hua2r.com/blog/20c3dfecb972ccb0421cd0402bfa1106.html
      

  8.   

    看错,还以为是字符串截取
    http://hi.baidu.com/phps/blog/item/d0f4b61b0fab9f1b8718bf80.html
    http://blog.csdn.net/wydin/archive/2007/07/18/1696490.aspx