function  mystr($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;
}

解决方案 »

  1.   

    function cnSubStr($string,$sublen)
    {
        if($sublen>=strlen($string))
        {
            return $string;
        }
        $s="";
        for($i=0;$i<$sublen;$i++)
        {
            if(ord($string{$i})>127) 
            {
                $s.=$string{$i}.$string{++$i};
                continue;
            }else{
                $s.=$string{$i};
                continue;
            } 
        }
        return $s."..";
    }
      

  2.   

    if(!isset($_SESSION['loginname']) || $_SESSION['logintype']!="sh_author")

    echo header("Location:au_login.php");
    exit;
      }
    $auid=$_SESSION['authorid'];
      

  3.   

    1、使用mb_string函数库中的mb_substr函数
    2、使用我的高效中文字串截取函数
    3、不计效率时可使用楼上的基于字节判断的函数
    4、只为列表时的截断,可以substr($text,0,$len).chr(0)."..."
      

  4.   

    xuzuning(唠叨) 你的高效函数在那里可以得到。
      

  5.   

    来,再发一遍
    function h_substr($str,$len)
    { if(func_num_args() <= 1) return $str;
      elseif(func_num_args() == 2)
      { preg_match_all("/[\x80-\xff]?./",$str,$ar);
        return join("",array_slice($ar[0],0,($len-1)))."…";
      }
      elseif(func_num_args() >= 3)
      { $start= func_get_arg(1);
    $len = func_get_arg(2);
        preg_match_all("/[\x80-\xff]?./",$str,$ar);
        return join("",array_slice($ar[0],$start,($len-1)))."…";
      }
    }