function msubstr($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;
  }试试看

解决方案 »

  1.   

    http://www.smartmm.cn/archives/11.html
    楼主可以看一下这个,这是以前写的,用过可以行!
      

  2.   

    /**
     * 截取UTF-8编码下字符串的函数
     *
     * @param   string      $str        被截取的字符串
     * @param   int         $length     截取的长度
     * @param   bool        $append     是否附加省略号
     *
     * @return  string
     */
    function sub_str($string, $length = 0, $append = true)
    {    if(strlen($string) <= $length) {
            return $string;
        }    $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);    $strcut = '';    if(strtolower(CHARSET) == 'utf-8') {
            $n = $tn = $noc = 0;
            while($n < strlen($string)) {            $t = ord($string[$n]);
                if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
                    $tn = 1; $n++; $noc++;
                } elseif(194 <= $t && $t <= 223) {
                    $tn = 2; $n += 2; $noc += 2;
                } elseif(224 <= $t && $t < 239) {
                    $tn = 3; $n += 3; $noc += 2;
                } elseif(240 <= $t && $t <= 247) {
                    $tn = 4; $n += 4; $noc += 2;
                } elseif(248 <= $t && $t <= 251) {
                    $tn = 5; $n += 5; $noc += 2;
                } elseif($t == 252 || $t == 253) {
                    $tn = 6; $n += 6; $noc += 2;
                } else {
                    $n++;
                }            if($noc >= $length) {
                    break;
                }        }
            if($noc > $length) {
                $n -= $tn;
            }        $strcut = substr($string, 0, $n);    } else {
            for($i = 0; $i < $length; $i++) {
                $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
            }
        }    $strcut = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);    if ($append && $string != $strcut)
        {
            $strcut .= '...';
        }    return $strcut;}
      

  3.   

    包含中文的  截取  
    最好用   mb_substr不要用  substr  
    用substr可能截取会出现乱码