2017-09-14 42 views
0

我正在使用php從數據庫中下載表並將其保存爲.csv文件。但是當其中一個列在字符串中包含逗號「,」時,腳本會將字符串的其餘部分(逗號後面)帶到新列中。我怎樣才能讓腳本忽略這個逗號?csv不會忽略','(逗號),並使用php創建一個新的行

我試過在旁邊放一個'\'或使用stripcslashes(),但沒有任何效果。

部分代碼的

$rows = mysqli_fetch_assoc($select_table); 

if ($rows) 
{ 
    getcsv(array_keys($rows)); 
} 
while($rows) 
{ 
    getcsv($rows); 
    $rows = mysqli_fetch_assoc($select_table); 
} 

// get total number of fields present in the database 
function getcsv($no_of_field_names){ 
    $separate = ''; 
// do the action for all field names as field name 
    foreach ($no_of_field_names as $field_name) 
     { 
      if (preg_match('/\\r|\\n|,|"/', $field_name)) 
       { 
       $field_name = '' . str_replace(',','!', $field_name) . ''; 
      } 
      echo str_replace('!',',', $field_name) . $separate . $field_name; 
      //sepearte with the comma 
      $separate = ','; 
} 

//make new row and line 
echo "\r\n"; 
} 
?> 

編輯:

如果我不使用逗號,然後CSV文件將無法正常在Excel加載(逐列,行通過行)。

在任何人開始說你爲什麼要這樣做,而我正在做它的實踐。

+3

你爲什麼要寫出你自己的CSV解析器?改用[fputcsv](http://php.net/manual/en/function.fputcsv.php)。該頁面的第一條評論是關於將其寫入瀏覽器的。這將創建一個格式正確的CSV字符串。 – aynber

+0

練習的人!實踐!!!! – noel293

+1

heh。好的,我會給你的。那麼你想要做的是,如果該值包含逗號,請在該值附近加引號。這將告訴任何CSV解析器,該字符串內部的字符串不應該被分割,直到它碰到下一個引號。 – aynber

回答

0

把$ field_name放在引號中,以便被視爲字符串將做的伎倆!

if (preg_match('/\\r|\\n|,|"/', $field_name)) 
       { 
       $field_name = '"'.$field_name.'"'; 
      //field_name = '' . str_replace(',','.', $field_name) . ''; 
      } 
1

既然你都練,這裏是CSV一些基本的規則(假設逗號作爲分隔符):

123,test,456 

當一個字段包含分離器,該字段必須用雙引號:

123,"monitor, Samsung","45,8" 

換句話說,如果一個字段是雙引號括起來,這並不意味着它是一個字符串,只存在(或可能)領域內的隔板。

當引用字段還包含引號,那些必須與其他報價進行轉義:

123,"monitor 24"", Samsung","45,8" 

記住這一點,當你的解析自己是非常重要的。 (實際上,一旦你開始使用雙引號,包含雙引號各個領域也應該被引用,即使裏面有沒有分隔符)

多行字段還必須在雙引號:

123,"monitor 24"", Samsung","test multiline 
field","45,8" 

以上實際上是1排。

相關問題