/**
* 截取中文部分字符串
*
* 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
*
* @access public
* @param string    $str    要处理的字符串
* @param int       $strlen 要截取的长度默认为10
* @param string    $other  是否要加上省略号,默认会加上
* @return string
*/function showtitle($str,$strlen=26,$other=false) {
    for($i=0;$i<$strlen;$i++)
      if(ord(substr($str,$i,1))>0xa0) $j++;
    if($j%2!=0) $strlen++;
    $rstr=substr($str,0,$strlen);
    if (strlen($str)>$strlen && $other) {$rstr.='...';}
    return $rstr;
}

解决方案 »

  1.   

    做循环,一个一个的数下去,遇到中文字符就往下走一位,直到相应长度为止;
    注意,判断中文字符的时候用0x80,0xa1只适合gb2312的,而0x80+是适合GBK的,保险一些!
    函数简单举例如下:
    function cutGBK($pString,$pLength,$sign='...'){ 
        $length = strlen($pString); 
        if($pLength > $length) { 
            $res = $pString.$sign; 
        }else{ 
            for($i=0;$i<=$pLength;$i++){ 
                if (ord(substr($pString,$i,1)) > 0x80){ 
                    $res .= substr($pString,$i,2); 
                    $i++; 
                }else{ 
                    $res .= substr($pString,$i,1); 
                }             
            } 
        } 
        return $res.$sign; 

      

  2.   

    给一个我自己写的参考一下
    /*
      进行字符串的截取
      $start:为子字符串的开始位置,
      $len为子字符串的长度
      $str为截取的字符串
      返回$str中从start开始的,长度为len的字符串的长度   作者:(fibona)熊祥众  日期:2005年12月
     */
     function KTSubstr($str,$start,$len)
     {
      if($start< 0 && $len < 0)
      {
       return $str; 
      }
      
      if(($start+$len) >= strlen($str))
      {
       
       return substr($str,$start,$len);   
      }
      else
      {
       $j=0;
              $num=$len;
              for($i=$start; $i< $num-1;$i++)
              {
                      if(ord(substr($str,$i,1))>0xa0) $j++;
              }
              if($j%2!=0)
               {
                      $num=$num+1;
               }else
               {
                      $num=$num;
               }
               return substr($str,$start,$num-1)."..."; 
                 
       /*
       if(ord(substr($str,$start+$len,1))>0xa0)
       {
        
        $m_strlen=$len+1;
        //echo $m_strlen;
        //echo "<hr>";
       }
       else
       {
        $m_strlen=$len;
       }
       
       return substr($str,$str,$m_strlen-1);
       */ 
      }
     }