Pregunta

El siguiente código obtiene una 'línea de informe' como una matriz y usos fputcsv a tranformar en CSV. Todo está funcionando genial, excepto por el hecho de que, independientemente del uso conjunto de caracteres I, se está poniendo una BOM UTF-8 en el principio del archivo. Esto es excepcionalmente molesto porque A) Yo estoy especificando iso y B) Tenemos un montón de usuarios que utilizan herramientas que muestran la lista de materiales UTF-8 como caracteres de basura.

Yo incluso han intentado escribir los resultados en una cadena, pelar el BOM UTF-8 y luego echo'ing hacia fuera y todavía conseguirlo. ¿Es posible que el problema reside con Apache? Si cambio la fopen en un archivo local que lo escribe muy bien sin la BOM UTF-8.

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;
¿Fue útil?

Solución

Mi conjetura sería que el archivo de código fuente de PHP tiene una lista de materiales, y ha habilitado búferes de salida de PHP.

Otros consejos

No sé si esto resuelve su problema, pero han intentado utilizar las funciones de impresión e implosionan a hacer lo mismo?

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

Eso no está probado, pero bastante obvio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top