你必须确定,feek的刚好是合法的字符结束或者开始处。

解决方案 »

  1.   

    1楼的说的我知道呀,我就是不知道什么算法能让每次seek都能到合法字符的结束或开始,
    请帮下忙哦.
      

  2.   

    header("Content-type:text/html;charset=GB2312");//加入头,防止乱码
    header("Expires:Mon,26 Jul 1997 05:00:00 GMT"); //   Date   in   the   past   
    header("Last-Modified:".gmdate("D, d M Y H:i:s")." GMT"); // always   modified   
    header("Cache-Control: no-cache,   must-revalidate"); //   HTTP/1.1   
    header("Pragma: no-cache");   
    ----------------------------
    把这段代码加紧PHP页里。
      

  3.   

    上面的办法基本就可以了。
    如果还不行的话。可以用 $titlenode = iconv('gb2312','utf-8//IGNORE',$titlenode);
      

  4.   

    function my_seek($fp,$offset)
    {
    $seeked = 0;
    while(($seeked<$offset)&&(!feof($fp)))
    {
    $c = fgetc($fp);
    if(ord($c)>0xa0)
    {
    fseek($fp,1,SEEK_CUR);
    $readed++;
    }
    $seeked++;
    }
    }
    function my_read($fp,$count)
    {
    $readed = 0;
    while(($readed<$count)&&(!feof($fp)))
    {
    $c = fgetc($fp);
    echo $c;
    if(ord($c)>0xa0)
    {
    //fseek($fp,1,SEEK_CUR);
    echo fgetc($fp);
    $readed++;
    }
    $readed++;
    }
    }大家帮忙看看上面两个函数有没问题,我用上面的函数实现读取文本
    结果有时候在文本的开头或结尾处还是有一两个乱码:
    echo '<div>';
    my_seek($fp,1000);
    my_read($fp,1000);
    echo '</div>'
    现在读取的文本大部分没乱码了,就是在开头和结尾处有几个乱码.
    而且很多时候我发现读取的文本和'</div>'混起来了.变成了
    XXXXXXXX/div>也就是说把HTML标签</div>前面的<给弄没掉了.
      

  5.   

    或者,你可以把你要读取的文件直接
    iconv成宽字符集的。
      

  6.   

    不行,还是有问题.应该还是定位的问题.
    帮我看看这个函数有没问题?
    function my_seek($fp,$offset) 

    $seeked = 0; 
    while(($seeked <$offset)&&(!feof($fp))) 

    $c = fgetc($fp); 
    if(ord($c)>0xa0) 

    fseek($fp,1,SEEK_CUR); 
    $seeked++; 

    $seeked++; 


      

  7.   

    最后上网找了半天UTF-8编码,找到这个http://www.hoodong.com/wiki/UTF-8
    我最终的解决方法,贴出来和大家分享下(只适用于UTF-8编码的TXT文本):
    fseek($fp,1000);
    $c = fgetc($fp);
    $num = ord($c);
    while(($num>=0x80)&&($num<=0xDF))
    {
    $c = fgetc($fp);
    $num = ord($c);
    }
    $start = ftell($fp)-1;
    fseek($fp, 1000, SEEK_CUR);
    $c = fgetc($fp);
    $num = ord($c);
    while(($num>=0x80)&&($num<=0xDF))
    {
    $c = fgetc($fp);
    $num = ord($c);
    }
    $end = ftell($fp)-1;
    fseek($fp, $start);
    if($data = fread($fp,$end-$start))