windows csv和mac csv有什么区别?

Mah*_* Eu 2 php 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);

}
Run Code Online (Sandbox Code Playgroud)

它与Windows csv工作正常.
但是当我从mac创建一个csv并解析它不能正常工作时(它无法识别行尾),

当我用mac打开相同的Windows csv并使用相同的代码解析它不起作用.
但是当我把它保存为windows csv时.它再次起作用.
所以实际上wat是mac csv和windows csv之间的区别?
这两个分隔符是不同的吗?
我该如何更改代码以使其兼容?

Bor*_*iet 13

答案在PHP文档评论中:

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

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

问题在于Windows上的行结尾和类似unix的机器之间的区别(就像你的mac一样): windows ='\r\n'unix = '\n'

解决方案:在打开文件之前添加此行:

ini_set('auto_detect_line_endings',TRUE);
Run Code Online (Sandbox Code Playgroud)