这个不是bug,你可以用mb_string扩展,或者
  /*****************************************************
   *
   * 文件名称: CSubstr.inc
   * 作    用: 截取指点长度的中文字符
   * 作    者: PHPX.COM--PHP论坛
   * 
   * 参    数: $str  : 所要截取的字符
   *           $start: 开始字符
   *           $len  : 截取长度,汉字
   *
   *****************************************************/
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; 
}

解决方案 »

  1.   

    我的意思是以前用substr截取汉字时有乱码,但是现在没有乱码了,很奇怪啊?大家有没有发现?
      

  2.   

    <?php
      $str='我爱你中华';
      echo substr($str,0,5);   //以前就会出现乱码,但是现在不会出现乱码了,你们有没有发现?
    ?>
      

  3.   

    嗯,确实.我的是5.1.4,也没出现乱码.好像比较新的php版本都没问题了.刚才试了下,utf-8,gbk都不会出现汉字被截断的情况了.请达人出来解释下,是不是substr函数被重新写过了?
      

  4.   

    我的5.2还是有乱码.一个中文字符串和一个iso-8859-1的字符串,不给出charset的情况是无法区分的,
    php也不知道你是一串法语还是一串中文,它怎么可能不截断中文?
      

  5.   

    如果不乱码那就是bug了。假如我这是一个数据字符串呢?他自己给我省了一位结果还正确吗?
      

  6.   

    php6肯定不会乱码
    built-in unicode support
      

  7.   

    我的也没有乱码,php5.1.6 utf-8
    不太了解utf-8,好像一个汉字占3字节,如果要截取前两个汉字,应该是substr($str,0,5);才能截到,如果是substr($str,0,4);就只能截到第一个汉字。
      

  8.   

    我的也没有问题
    我的php是5.14
      

  9.   

    substr($str,0,4).chr(0)这样可以保证汉字不会乱码。