Después de una gran cantidad de scrafffing alrededor y algunas comprobaciones carácter algo tedioso, que tienen una versión de los códigos anteriormente referenciados por Diego y Mahn que se tira correctamente fundas y reemplazar con comillas dobles en todos los campos en fputcsv
. y luego muestra el archivo en el navegador para descargar.
También tuve un problema secundario de no poder estar seguro de que las comillas dobles siempre/nunca se escaparon.
Específicamente para cuando la salida directamente al navegador utilizando el flujo de entrada php: // como se hace referencia por Diego. Chr(127)
es un carácter de espacio, por lo que el archivo CSV tiene algunos espacios más que lo contrario, pero creo que esto evita el problema de chr(0)
caracteres NULOS en UTF-8.
/***
* @param $value array
* @return string array values enclosed in quotes every time.
*/
function encodeFunc($value) {
///remove any ESCAPED double quotes within string.
$value = str_replace('\\"','"',$value);
//then force escape these same double quotes And Any UNESCAPED Ones.
$value = str_replace('"','\"',$value);
//force wrap value in quotes and return
return '"'.$value.'"';
}
$result = $array_Set_Of_DataBase_Results;
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export-'.date("d-m-Y").'.csv"');
foreach($result as $row) {
fputcsv($fp, array_map("encodeFunc", $row), ',', chr(127));
}
unset($result,$row);
die;
}
Espero que esto sea útil para alguien.
Sólo por curiosidad, ya que mi conjetura es que estás en cuestión era: Re a 'Magento/Varien_Io_File :: streamWriteCsv()' (que al final sólo utiliza 'fputcsv'), hizo ¿alguna vez encuentras una buena solución para esto? Posiblemente usando 'Varien_File_Csv'? – pspahn
@pspahn Nunca lo hizo, (y esto fue hace más de cuatro años, pero no creo que haya sido específicamente relacionado con Magento) –