如何让PHP fgetcsv()识别Classic Mac(CR)新行字符?

时间:2011-01-21 14:24:34

标签: php newline fgetcsv

我使用此代码从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没有认识。

alt text

如果我手动将换行符从Classic Mac(CR)更改为Unix(LR),那么它可以正常工作,但我需要将其自动化。

如何让fgetcsv识别经典Mac(CR)换行符?

2 个答案:

答案 0 :(得分:19)

来自manual

  

注意:如果PHP不正确   识别行结尾时   读取或创建的文件   一台Macintosh电脑,启用   auto_detect_line_endings运行时   配置选项可能有助于解决   问题。

答案 1 :(得分:1)

如果Saul的答案不起作用,我会编写一个简单的脚本来同时读取文件并使用\ n str_replace all \ r \ n,将结果转储到新文件中,然后fgetcsv'ing新文件

我觉得这些术语来自使用打字机的日子很有趣:
\ n =换行(LF) - 将纸张前移一行 \ r =回车(CR) - 将托架返回打字机的左侧。