I have a simple CSV file being generated that includes foreign characters. I've noted that if I don't include a Byte Order Mark that the foreign characters aren't appearing properly in Excel (but they appear fine when a BOM is present).
How can I add a BOM to the beginning of the file when it's first created? I've tried the following and it's not working :-/
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;
}
fopen()
(though not a good idea in your append).... don't usefputcsv()
to try and write it – Norris