我有一个类似以下的CSV文件(它有大约500行)
ID,Title,LastName,HouseNo,Street,City,Postcode,Telephone
1209109,Miss,Test,1635,Test Road,Test, AB12 2EF,
1209833,Mrs,Test,3,Test Close,Test,BB12 2EF,
1205839,Miss,Test,1,Test Road,Test,AA12 2EX,
然后我使用以下PHP:
$handle = fopen($csvFile, "r");
$imports = array();
$row = 1;
echo "<table>";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
// skip headers
if($row == 1){ $row++; continue; }
echo "<tr>";
echo "<td>$data[0]</td>";
echo "<td>$data[1]</td>";
echo "<tr>";
}
echo "</table>";
fclose($handle);`
我期待的是:
1209109 Miss
1209833 Mrs
但由于某种原因,它似乎从文件中的随机点开始,然后输出错误的<td>
中的一些数据。
问题可能是每行的尾随逗号吗?
谢谢
答案 0 :(得分:1)
我猜你遇到的问题是行尾(EOL
)不匹配。基本上,fgetcsv()
函数会根据换行符分解文件,但它会使用与使用该文件的字符不同的字符(例如,\n\r
vs \r
vs \n
)。结果是该函数只是抓取第一个1000
个字符(根据函数调用)并将其视为第一行,然后它抓取下一个1000个字符等...这会导致一些随机输出。
您可以尝试以下方式:
ini_set('auto_detect_line_endings', true);
在获取文件之前。或者您可以通过手动修改CSV来标准化EOL字符/在文件转换中打开电子表格,这样您就可以更改EOL字符(即Unix vs Windows
答案 1 :(得分:0)
我无法使用您提供的数据重现您的错误(即使留下或删除了尾随逗号),但我确实注意到您没有在代码中关闭表格行已供应。
我认为这不会导致显示错误,但您可能希望将代码更改为:
$row = 1;
echo "<table>";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
// skip headers
if($row == 1) {
$row++;
continue;
}
echo "<tr>";
echo "<td>$data[0]</td>";
echo "<td>$data[1]</td>";
echo "</tr>\n";
}
echo "</table>";
fclose($handle);