<?PHP
$str="这个字符好长呀,^_^";
$Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符...
Echo   "$Short_Str";
Function csubstr($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; 

Function showShort($str,$len) 

$tempstr = csubstr($str,0,$len); 
if ($str<>$tempstr) 
$tempstr .= "..."; //要以什么结尾,修改这里就可以.return $tempstr; 
}

解决方案 »

  1.   

    也就是PHP自带函数substr截错字符的问题,请各位帮忙。
      

  2.   

    [烦人]兄弟函数写的是不错。但你拿这个字符串试试结果。$str="让价格做主,铭瑄极光5700LE成普及最爱!";你把每个数字和字母都当作1个文字来看,好象不合适吧不过,老兄这个函数令小弟收获不小,十分感谢。
      

  3.   

    出现这个是因为中文字符占两个字节,,你取字符的时候如果取的长度刚好将一个中文字符分开的话,它就会将后面一个字符吃掉
    在你这个例子里面就是将<a>中的<吃掉了呵呵给个我写的函数给你,没有这么复杂,,呵呵,不过会出现和你一样的问题,所以使用这个函数时一般给出的长度都是偶数,但是对于中英文混合也不行,,
    //取一段字符串的前几个字符
    function cutstr($str,$len)
    {
     if ($len==0) return $str;
     if (strlen($str)>$len)
       $tmptxt=substr($str,0,$len)."..";
     else
       $tmptxt=$str;
      return $tmptxt;
    }
    想要在PHP中实现中文字串截取而不出现乱码,,有点复杂
      

  4.   

    phchenjie(【烦人】)   他的办法不错。。
      

  5.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172192
      

  6.   

    先去掉HTML标签,然后按双字节方式截取,而不是单字节。
      

  7.   

    用 mb_substr ,如果是 PHP5,还可使用 icnov_substr ,效率都很高.
      

  8.   

    mb_substr是比substr 强,但只强一点,仍然会出现少量的截半个字的现象。 kingerq(多菜鸟) 的文章里,下列函数的确有效!感谢!function csubstr($string,$length,$start=0)                  
    {      
     $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;                                  
    }