2013-05-13 207 views
2

我想使用此代码
windows csv和mac 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解析一个CSV文件。
但是当我创建从MAC一个csv并解析它不工作。(它不能识别线的端部),

还当我打开相同的窗户CSV与Mac和使用相同的代码是解析不工作。
但是当我将它保存为Windows csv。它再次运作。
所以实际上wat是mac csv和windows csv的区别?
这两个分隔符是不同的吗?
我应该如何更改代码以使其适用于两者?

+3

差异是结束字符的行....注意:如果PHP读取文件时无法正确识别行结尾,或者由Macintosh创建计算机,启用auto_detect_line_endings运行时配置选项可能有助于解决问题。 – 2013-05-13 13:52:56

+0

看看'auto_detect_line_endings' – 2013-05-13 13:54:20

回答

12

答案是在PHP文档注释:

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

注意:无论是在阅读如果PHP没有正确认识到行结尾时,文件或Macintosh计算机创建,使auto_detect_line_endings运行时配置选项可能有助于解决问题。

的问题是在Windows和UNIX的机器一样行尾之间的差异(如您的Mac):windows ='/n'unix = '/r/n'

解决办法:

:打开文件之前添加此行
ini_set('auto_detect_line_endings',TRUE); 
0

在Windows中的返回字符是\r在Mac我相信它的\r\n

+3

它是'\ r \ n'在windows上,'\ n'在UNIX上是(是?)'\ r'在mac上 – 2013-05-13 13:55:13

+0

啊让我翻转 – 2013-05-13 13:55:58