我有这个PHP代码:
$myfile = fopen("index.txt", "r") or die("Unable to open file!");
//rewind($myfile);
fseek($myfile, 0);
while(!feof($myfile)) {
$line=fgets($myfile);
echo $line;
echo strpos($line,":");
echo "<br />";
}
fclose($myfile);
index.txt 包含以下数据:
:a
1:b
2:c
结果:
:a 3
1:b 1
2:c1
我遇到函数strops
的问题,它没有给出准确的位置编号。
正如您在结果中看到的那样,我得到的数字3
应该是0
字母a
&amp;之间加了一个空格。数字3
(以及字母b
和数字1
之间)。那是为什么?
如上所示,我尝试将文件指针位置设置为0,但不起作用。
感谢。
答案 0 :(得分:1)
您的index.txt具有UTF-8编码。但常用的是“没有BOM的UTF-8”。它们之间的区别在于第一个在文件开头有三个字节(ef bb bf)。您应该更改index.txt文件的编码。
另一种通用解决方案(无论是否有BOM文件)是检查字符串中的BOM(仅用于文件的第一行)。以下是检查和删除BOM字节的功能。只需将其应用于$ line: $ line = removeBOM(fgets($ myfile));
function removeBOM($text) {
if(substr($text, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
$text= substr($text, 3);
}
return $text;
}