2014-09-05 2 views
2

У меня есть простой CSV-файл, который сгенерирован, содержащий иностранные символы. Я отметил, что если я не включу знак байтового заказа, что иностранные символы не отображаются должным образом в Excel (но они выглядят отлично, когда присутствует спецификация).Добавление спецификации в файл CSV с использованием fputcsv

Как добавить спецификацию в начало файла при его создании? Я попытался следующие, и это не работает: -/

function processForm($competition, $competitionEntry) { 
    $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM 

    $filename = $competition->ID.".csv"; 
    $file = "entries/".$filename;  

    $fields = array_keys($competitionEntry); 
    $submittedForm = $competitionEntry; 

    if(file_exists($file)) { 
     $fp = fopen($file, 'a'); 
     if($fp && 
      fputcsv($fp, $submittedForm) && 
      fclose($fp)) { 
      return true; 
     } 
    } else { // CREATE NEW FILE 
     $fp = fopen($file, 'w'); 
     if($fp && 
      fputcsv($fp, $BOM) && // WRITE BOM TO FILE 
      fputcsv($fp, $fields) && 
      fputcsv($fp, $submittedForm) && 
      fclose($fp)) {  
      return true; 
     } 
    } 
    return false; 
} 
+4

[fwrite()] (http://www.php.net/manual/en/function.fwrite.php) $ BOM в файл сразу после вашего 'fopen()' (хотя это и не очень хорошая идея в вашем append) .... не используйте 'fputcsv()', чтобы попытаться написать его –

+0

@MarkBaker Если вы хотите вставить это в ответ, я соглашусь с ним. Это сработало. В противном случае я сделаю это позже. Дай мне знать. –

ответ

9

Благодаря Mark Baker этого ответа:

мне нужно использовать FWRITE(), чтобы добавить спецификацию, не fputcsv().

рабочая версия выглядит следующим образом:

if(file_exists($file)) { 
    $fp = fopen($file, 'a'); 
    if($fp && 
     fputcsv($fp, $submittedForm) && 
     fclose($fp)) { 
     return true; 
    } 
} else { 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $BOM); // NEW LINE 
    if($fp &&  
     fputcsv($fp, $fields) && 
     fputcsv($fp, $submittedForm) && 
     fclose($fp)) {  
     return true; 
    } 
} 

Спасибо, Марк!