1. <?php  
  2. function cut_str($sourcestr,$cutlength){ 
  3.         $returnstr=''
  4.         $i=0; 
  5.         $n=0; 
  6.         $str_length=strlen($sourcestr);//字符串的字节数 
  7.         while (($n<$cutlengthand ($i<=$str_length)) 
  8.         { 
  9.             $temp_str=substr($sourcestr,$i,1); 
  10.             $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码 
  11.             if ($ascnum>=224)    //如果ASCII位高与224, 
  12.             { 
  13.                 $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符 
  14.                 $i=$i+3;            //实际Byte计为3 
  15.                 $n++;            //字串长度计1 
  16.             } 
  17.             elseif ($ascnum>=192) //如果ASCII位高与192, 
  18.             { 
  19.                 $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符 
  20.                 $i=$i+2;            //实际Byte计为2 
  21.                 $n++;            //字串长度计1 
  22.             } 
  23.             elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母, 
  24.             { 
  25.                 $returnstr=$returnstr.substr($sourcestr,$i,1); 
  26.                 $i=$i+1;            //实际的Byte数仍计1个 
  27.                 $n++;            //但考虑整体美观,大写字母计成一个高位字符 
  28.             } 
  29.             else                //其他情况下,包括小写字母和半角标点符号, 
  30.             { 
  31.                 $returnstr=$returnstr.substr($sourcestr,$i,1); 
  32.                 $i=$i+1;            //实际的Byte数计1个 
  33.                 $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽... 
  34.             } 
  35.         } 
  36.         if ($str_length>$cutlength*3){ 
  37.             $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号 
  38.         } 
  39.         return $returnstr
  40.  
  41.     } 
  42. ?>