使用fputcsv将BOM添加到CSV文件

我有一个简单的CSV文件正在生成,其中包括外国字符。 我注意到,如果我不包括一个字节顺序标记,这些外来字符在Excel中没有正确显示(但是当BOM存在时它们显示正常)。

在第一次创build时,如何将BOM添加到文件的开头? 我试过以下,它不工作: – /

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; } 

感谢Mark Ba​​ker的回答:

我需要使用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; } } 

谢谢,马克!