解决截取中文字符出现乱码的函数function msubstr($str,$start,$len) { 
    $strlen=$start+$len; 
    for($i=0;$i<$strlen;$i++) { 
        if(ord(substr($str,$i,1))>0xa0) { 
            $tmpstr.=substr($str,$i,2); 
            $i++; 
        } else 
            $tmpstr.=substr($str,$i,1); 
    } 
    return $tmpstr; 
}

解决方案 »

  1.   

    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);
       return $r_str;
    }
    //取 $string 的前n个字符
    echo TrimChinese($string,n);
      

  2.   

    怎么样才能弄出问题来?我这里弄不出问题我这里是iis5+php 4.3.3
      

  3.   

    **
    * 截取中文部分字符串
    *
    * 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
    *
    * @access public
    * @param string    $str    要处理的字符串
    * @param int       $strlen 要截取的长度默认为10
    * @param string    $other  是否要加上省略号,默认会加上
    * @return string
    */
    function showtitle($str,$strlen=10,$other=true) {
        for($i=0;$i<$strlen;$i++)
          if(ord(substr($str,$i,1))>0xa0) $j++;
        if($j%2!=0) $strlen++;
        $rstr=substr($str,0,$strlen);
        if (strlen($str)>$strlen && $other) {$rstr.='...';}
        return $rstr;
    }
      

  4.   

    1、可以使用mbstring扩展库的mb_substr,中文算一个
    2、自己书写截取函数,http://www.csdn.net/Develop/read_article.asp?id=20454
    3、仅为了输出截取的串:substr($test_s, 0, 30).chr(0);楼上几位的中文取字串的函数是可用的。但是效率不高,功能上也较substr弱些。
    2中的函数仅比mb_substr稍慢,功能与mb_substr和substr一样