我使用此代码从CSV文件中获取列数:
$this->dummy_file_handler = fopen($this->config['file'],'r');
if ($dataset =fgetcsv($this->dummy_file_handler))
{
$this->number_of_columns = count($dataset);
}
它工作正常,除非该文件是使用Excel for Mac 2011导出的,因为新行字符是经典Mac(CR),fgetcsv
没有认识。
如果我手动将换行符从Classic Mac(CR)更改为Unix(LR),那么它可以正常工作,但我需要将其自动化。
如何让fgetcsv
识别经典Mac(CR)换行符?
答案 0 :(得分:19)
来自manual:
注意:如果PHP不正确 识别行结尾时 读取或创建的文件 一台Macintosh电脑,启用 auto_detect_line_endings运行时 配置选项可能有助于解决 问题。
答案 1 :(得分:1)
如果Saul的答案不起作用,我会编写一个简单的脚本来同时读取文件并使用\ n str_replace all \ r \ n,将结果转储到新文件中,然后fgetcsv'ing新文件
我觉得这些术语来自使用打字机的日子很有趣:
\ n =换行(LF) - 将纸张前移一行
\ r =回车(CR) - 将托架返回打字机的左侧。