<?php
function trimChinese($str,$len)
{
$r_str='';
   $i=0;
   while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
     $i++;
   }
   $r_str=substr($str,0,$i);
   if (strlen($str) > $len)
$r_str .= "...";
   return $r_str;
}
$str = "比如要求长度为个长度长度长度长度";
echo trimChinese($str,30);
?>

解决方案 »

  1.   

    gu1dai(异域苍穹......追夢人) 
    可以贴出来看看吗,上面的函数,在字符不够时,不会补齐,对不齐不太好看。
      

  2.   

    http://community.csdn.net/Expert/topic/4234/4234735.xml?temp=.962948
      

  3.   

    <?php
    function trimChinese($str,$len)
    {
    $r_str='';
       $i=0;
       while ($i<$len){
    $ch=substr($str,$i,1);
    if(ord($ch)>0x80) $i++;
         $i++;
       }
       $r_str=substr($str,0,$i);
       if (strlen($str) > $len)
    $r_str .= "...";
       //用'_'来补齐
       return str_pad($r_str,$len+3,'_');
    }
    $str = "比如要求长度长度长a度";
    echo trimChinese($str,30);
    $str = "aaa";
    echo "<br>";
    echo trimChinese($str,30);
    echo "<br>";
    $str = "比如要求长度为个长度长度长度长度长度长";
    echo trimChinese($str,30);
    echo "<br>";
    ?>
      

  4.   

    补齐的话用了str_pad函数,如上
      

  5.   

    再次修改:
    如果是用空格来补的话,就要以&nbsp;来替换"_"(可以是用其他少见字符)
    $len应该+4才对。
    <?php
    function trimChinese($str,$len)
    {
    $r_str='';
       $i=0;
       while ($i<$len){
    $ch=substr($str,$i,1);
    if(ord($ch)>0x80) $i++;
         $i++;
       }
       $r_str=substr($str,0,$i);
       if (strlen($str) > $len)
    $r_str .= "...";
       //用'_'来补齐,然后以"&nbsp;"来代替.
       return str_replace("_","&nbsp;",str_pad($r_str,$len+4,'_'));
    }
    $str = "比如要求长度长度长a度";
    echo trimChinese($str,30);
    $str = "比如";
    echo "<br>";
    echo trimChinese($str,30);
    echo "<br>";
    $str = "比如要求长aaa度为个长度长度长度长度长度长";
    echo trimChinese($str,30);
    echo "<br>";
    ?>
      

  6.   

    http://blog.csdn.net/Fibona/archive/2005/12/21/558746.aspx
    这里面我写了一个,对于中文英文混排是没有问题的,经过了很多测试的