Estoy usando fputcsv en PHP para generar un archivo delimitado por comas de una consulta de base de datos. Al abrir el archivo en gedit en Ubuntu, parece correcto: cada registro tiene un salto de línea (sin caracteres de salto de línea visibles, pero se puede decir que cada registro está separado, y abrirlo en la hoja de cálculo de OpenOffice me permite ver el archivo correctamente).códigos fputcsv y newline
Sin embargo, estamos enviando estos archivos a un cliente en Windows, y en sus sistemas, el archivo viene como una línea grande y larga. Al abrirlo en Excel, no reconoce varias líneas en absoluto.
He leído varias preguntas aquí que son bastante similares, incluyendo this one, que incluye un enlace a la explicación realmente informativa Great Newline Schism.
Desafortunadamente, no podemos simplemente decirle a nuestros clientes que abran los archivos en un editor "más inteligente". Deben poder abrirlos en Excel. ¿Existe alguna forma programática para garantizar que se agreguen los caracteres correctos de la línea nueva para que el archivo pueda abrirse en un programa de hoja de cálculo en cualquier sistema operativo?
Ya estoy usando una función personalizada para forzar las comillas alrededor de todos los valores, ya que fputcsv es selectivo al respecto. He intentado hacer algo como esto:
function my_fputcsv($handle, $fieldsarray, $delimiter = "~", $enclosure ='"'){
$glue = $enclosure . $delimiter . $enclosure;
return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure."\r\n");
}
Pero cuando se abre el archivo en un editor de texto de Windows, todavía aparece como una sola línea larga.
+ 1 para resaltar un problema que he estado teniendo –
¿incluye su encabezado de campo csv? – ajreal
Al comparar el código anterior con la solución aceptada (suponiendo que este archivo se genere en Linux), parece que el problema original podría haber estado en _transferring_ el archivo al cliente, no necesariamente en su generación. Por ejemplo, la descarga del archivo original (con CR + LF EOL) a través de FTP en modo ASCII, desde Linux a Windows, hubiera resultado en daños en las terminaciones de línea. – MrWhite