2013-05-13 205 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