我正在使用 csv 解析器类 (http://code.google.com/p/php-csv-parser/) 来解析和提取 csv 文件中的数据。我遇到的问题是它仅适用于某些 csv 文件类型。(Mac、Ms-Dos 和 Windows 似乎都有 csv 类型。)
如果我使用使用 csv - windows 选项保存在 mac(在 excel 中)上的 csv 文件,则该代码有效。但是,如果我将 Windows 机器上的文件简单地保存为 csv,那是行不通的。(你会认为这与在 mac 上保存 csv-windows 的格式相同。)如果我将它保存为 csv-MSDOS 文件,它确实可以在 Windows 机器上工作。这似乎有点荒谬。
有没有办法标准化这三种文件类型,以便我的代码可以读取上传的任何类型的 csv?
我想它会是这样的:
$standardizedCSV = preg_replace_all('/\r[^\n]/', '\r\n', $csvContent);
我知道这与每种文件类型如何处理行尾有关,但我有点想弄清楚这些差异。如果有人有任何建议,请告诉我。
谢谢。
更新:这是我正在使用的 csv 解析器中的相关代码,它逐行提取数据:
$c = 0;
$d = $this->settings['delimiter'];
$e = $this->settings['escape'];
$l = $this->settings['length'];
$res = fopen($this->_filename, 'r');
while ($keys = fgetcsv($res, $l, $d, $e)) {
if ($c == 0) {
$this->headers = $keys;
} else {
array_push($this->rows, $keys);
}
$c ++;
}
我想我需要了解 fgetcsv 如何处理 eol,以便我可以确保以相同的方式处理任何格式的 csv 文件。