2

我有一个如下所示的 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>

provlem 可以是每行尾随的逗号吗?

谢谢

4

2 回答 2

1

我猜您遇到的问题是行尾 ( EOL) 不匹配。基本上,该fgetcsv()函数根据换行符分解文件,但它期望的字符与正在使用文件的字符不同(例如,\n\rvs \rvs \n)。结果是该函数只是抓取第一个1000字符(根据函数调用)并将其视为第一行,然后它抓取下一个 1000 个字符,依此类推......这将导致一些随机输出。

您也许可以尝试以下方法:

ini_set('auto_detect_line_endings', true);

在你抓取文件之前。或者您可以通过手动修改 CSV 以标准化 EOL 字符/在文件转换中打开电子表格,从而允许您更改 EOL 字符(即 Unix 与 Windows

于 2013-06-03T22:31:27.073 回答
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);
于 2013-06-03T22:43:45.440 回答