我有一堆文件,其数据格式如下: INT | INT |串|串
我有一些函数可以将所有文件放在目录中,格式化它们的名称并从中创建一个选择下拉菜单。
由此,用户选择他想要打开的文件。
选择的文件(其文件名)通过POST发送到第二个php文件,该文件在下拉表单下方的iframe中打开。
这些是所述文件的相关内容:
<table>
<thead>
<tr>
<th>A:</th>
<th>B:</th>
<th>C:</th>
</tr>
</thead>
<tbody>
<?php
$fl = $_POST["file"];
$currentfile = fopen("./dir/$fl","r");
if ($currentfile) {
while (($line = fgets($currentfile)) !== false) {
$n = sscanf($line, "%d|%d|%[^|]|%[^\n]", $a,$b,$c,$d);
print "<tr><td>$a</td><td>$b</td><td>$d</td></tr>";
}
fclose($currentfile);
} else {
print "Error: Couldn't open file.<br>";
}
?>
</tbody>
</table>
现在不知何故,每个文件中的第一行都没有显示在由此生成的表中,其他一切都很好。
例如,这是一个文件。
1|334|Item 1
2|837|Item 2
3|321|Item 3
4|124|Item 4
5|331|Item 5
etc...
这是我得到的输出。
A: B: C:
2 837 Item 2
3 321 Item 3
4 124 Item 4
5 331 Item 5
etc...
或代码:
<table>
<thead>
<tr>
<th>A:</th>
<th>B:</th>
<th>C:</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>837</td>
<td>Item 2</td>
</tr>
<tr>
<td>3</td>
<td>321</td>
<td>Item 3</td>
</tr>
<tr>
<td>4</td>
<td>124</td>
<td>Item 4</td>
</tr>
<tr>
<td>5</td>
<td>331</td>
<td>Item 5</td>
</tr>
etc...
</tbody>
</table>
正如您可以通过上面的代码看到的那样,td标签被打印出来,但是它们中没有数据,而第二组td标签中有第二行数据,应该如此,那为什么不读取,扫描和打印文件的第一行呢?
答案 0 :(得分:1)
我相信这是因为文件开头有“字节顺序标记”。 您需要检查并替换它或将其从文件中删除。
这对我有用:
$line = str_replace("\xEF\xBB\xBF",'',$line);
也许此代码不适用于您的系统,您需要尝试其他一些代码来删除BOM。 试试这个:
#red {
height: 400px;
width: 100%;
background-color: rgba(255, 0, 0, 0.3);
position: fixed;
top: 0px;
}
#blue {
width: 29%;
height: 100%;
background-color: rgba(0, 0, 255, 0.3);
position: fixed;
right: 0;
top: 0;
}
#yellow {
width: 80%;
height: 75px;
background-color: yellow;
}
希望它有所帮助。