PHP逐行读取txt文件

时间:2017-05-02 17:02:37

标签: php file line

我有这个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,但不起作用。

感谢。

1 个答案:

答案 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;
}