php有一个mb_substr函数,是针对2进制的,可以一试

解决方案 »

  1.   

    function mb_substr($str, $len, $padstr="...")
    {
    $ret = "";
    if (strlen($str) <= $len)
    {
    return $str;
    }

    for($i=0; $i<$len; $i++)
    {
    $ret.=$str[$i];
    if (ord($str[$i]) > 128)
    {
    $i++;
    $ret.=$str[$i];
    }
    }

    $ret .= $padstr; return $ret;
    }
      

  2.   

    to tttk(网络芝麻) :你那个函数里面$str是字符串还是数组?怎么会有$ret.=$str[$i];?
      

  3.   

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