PHP Streaming CSV aggiunge sempre UTF-8 BOM
-
24-09-2019 - |
Domanda
Il codice seguente ottiene un 'linea di rapporto' come un array e usi fputcsv a trasformata di in CSV. Tutto è bello lavorare tranne per il fatto che, indipendentemente l'uso charset I, sta mettendo un BOM UTF-8, all'inizio del file. Questo è particolarmente fastidioso perché A) io sto specificando iso e B) Abbiamo un sacco di utenti che utilizzano gli strumenti che mostrano la bom UTF-8 come caratteri di spazzatura.
Ho anche provato a scrivere i risultati in una stringa, spogliando il BOM UTF-8 e quindi echo'ing fuori e ancora farlo. E 'possibile che il problema risiede con Apache? Se cambio la fopen in un file locale scrive proprio bene senza l'UTF-8 BOM.
header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");
$outstream = fopen("php://output",'w');
for($i = 0; $i < $report->rowCount; $i++) {
fputcsv($outstream, $report->getTaxMatrixLineValues($i), ',', '"');
}
fclose($outstream);
exit;
Soluzione
La mia ipotesi è che il file di codice sorgente PHP ha una distinta base, e si dispone di output buffering del php abilitato.
Altri suggerimenti
Non so se questo risolve il problema, ma hai provato ad utilizzare le funzioni di stampa e Implode di fare la stessa cosa?
header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");
for($i = 0; $i < $report->rowCount; $i++) {
print(implode(',',$report->getTaxMatrixLineValues($i)));
}
Questo non è testato, ma abbastanza evidente.