function str_sub($str,$start,$len) 

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

解决方案 »

  1.   

    这个最好用css来规定,不要用php处理。 function subString_UTF8($str, $start, $lenth)
        {
            $len = strlen($str);
            $r = array();
            $n = 0;
            $m = 0;
            for($i = 0; $i < $len; $i++) {
                $x = substr($str, $i, 1);
                $a  = base_convert(ord($x), 10, 2);
                $a = substr('00000000'.$a, -8);
                if ($n < $start){
                    if (substr($a, 0, 1) == 0) {
                    }elseif (substr($a, 0, 3) == 110) {
                        $i += 1;
                    }elseif (substr($a, 0, 4) == 1110) {
                        $i += 2;
                    }
                    $n++;
                }else{
                    if (substr($a, 0, 1) == 0) {
                        $r[ ] = substr($str, $i, 1);
                    }elseif (substr($a, 0, 3) == 110) {
                        $r[ ] = substr($str, $i, 2);
                        $i += 1;
                    }elseif (substr($a, 0, 4) == 1110) {
                        $r[ ] = substr($str, $i, 3);
                        $i += 2;
                    }else{
                        $r[ ] = '';
                    }
                    if (++$m >= $lenth){
                        break;
                    }
                }
            }
            return $r;
        } // End subString_UTF8;
    }// End String#由于此函数返回的是一个数组,因此要配合join函数来显示字符串:
    #join('',subString_UTF8($str, $start, $lenth));
    #在页面显示的时候还可以在此语句后面连一个"..."