我用PHP打开一个包含中文的文本文件,想读取其中的一部分文本:
fseek($fp, 1000);
fread($fp, 1024);
我发现把其中的1000改变下有时读取的是乱码,有时读取的是正确的。这是什么原因?是不是因为文件里包含了英文,而中文占两字节英文占一字节导至设置文件指针出问题?由于文本文件比较大,为了提高性能我不想用filegetcontents,不知道有什么办法实现?
fseek($fp, 1000);
fread($fp, 1024);
我发现把其中的1000改变下有时读取的是乱码,有时读取的是正确的。这是什么原因?是不是因为文件里包含了英文,而中文占两字节英文占一字节导至设置文件指针出问题?由于文本文件比较大,为了提高性能我不想用filegetcontents,不知道有什么办法实现?
然后读取文本。
做个判断字符的函数fseek($fp, cut_str(1000));
//其中cut_str是你要写的判断函数
或
定位后先把这一行全取出来用fseek($fp,10000); $n=filesize('data.txt')>1000?1000:filesize('data.txt');
fseek($fp,-$n,SEEK_CUR);
while($line=fread($fp,$n)){
if(preg_match("/.+\r?\n+([^\r\n]+)$/",$line,$matches)){
$text=$matches[1]; //这就是文本中你所定位的那一行数据
break;
}
fseek($fp,-$n*2,SEEK_CUR);
}
$x=10000;
fseek($fp,$x);
$n=$x>1000?1000:$x;
fseek($fp,-$n,SEEK_CUR);
while($line=fread($fp,$n)){
if(preg_match("/.+\r?\n+([^\r\n]+)$/",$line,$matches)){
$text=$matches[1]; //这就是文本中你所定位的那一行数据
break;
}
fseek($fp,-$n*2,SEEK_CUR);
}
//其中cut_str是你要写的判断函数
这个怎么实现?我是要定位到指定位置的字符但不知道是什么字符.
比如一个文件里有:aaa中文bbb
如果用fseek($fp,4)的话就定位到了'中'字的中间了(因为'中'由两个字节组成),这样读取就有乱码的.
我就想知道这个问题怎么解决.