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;
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top