Windows的CSV和MAC的CSV有什么区别?


what is the difference between windows csv and mac csv?

我正在尝试使用此代码解析csv文件

if (($handle = fopen($csvFilePath, "r")) !== FALSE) {
        $c=0;
        $string="";
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if($c>0)
        {
        if(($data[$email]!="") and ($data[$firstname]!="") and ($data[$lastname]!=""))
        {
        $string.='(1,';         
            $string.="'".$data[$email]."',";
            $string.="'".$data[$firstname]."',";
            $string.="'".$data[$lastname]."',";
            $string.="'".Yii::app()->params['clientimporttext']."'";
       $string.='),';
       }
        }
        $c++;
    }
fclose($handle);
}

它是正常工作与windows csv。
但是当我从MAC创建CSV并解析时,它不起作用。(它不能识别行尾),

当我用MAC打开相同的Windows CSV并使用相同的代码进行解析时,它也不起作用。
但是当我保存为Windows csv文件时。它又成功了。
MAC CSV和Windows CSV有什么区别呢?
这两个的分隔符不同吗?
我应该如何改变代码,使其与两者的工作?

答案在PHP文档注释中:

http://be2.php.net/manual/en/function.fgetcsv.php

注意:如果PHP在读取Macintosh计算机上或由Macintosh计算机创建的文件时不能正确识别行结尾,启用auto_detect_line_endings运行时配置选项可能有助于解决此问题。

问题在于Windows和类unix机器(如mac)的行结尾之间的差异:windows =''r'n'unix = ''n'

解决方法:在打开文件之前添加这一行:

ini_set('auto_detect_line_endings',TRUE);

Mac和Windows使用不同的EOL字符。这在最好的日子里也会让人困惑。以下是它们在不同平台上的工作原理:http://peterbenjamin.com/seminars/crossplatform/texteol.html

Windows的返回字符是'r, Mac的是'r'n