PHP que genera csv no envía las nuevas alimentaciones de línea correctas

Tengo un script que genera un archivo csv usando el siguiente código:

header('Content-type: text/csv'); header('Content-Disposition: attachment; filename="'.date("Ymdhis").'.csv"'); print $content; 

La variable $ content simplemente contiene líneas con campos separados por comas y luego finalizados con “. \ N”; para generar una nueva línea

Cuando abro el archivo en csv se ve bien, sin embargo, cuando trato de usar el archivo para importarlo a un progtwig externo (MYOB), no reconoce el carácter de Fin de línea (\ n) y asume una larga línea de texto.

Cuando veo el contenido del archivo en el bloc de notas, el carácter de fin de línea (\ n) es un pequeño rectángulo que se parece al código de carácter 0x7F.

Si abro el archivo y lo vuelvo a guardar en Excel, quita este carácter y lo reemplaza con un carácter de final de línea adecuado y puedo importar el archivo.

¿Qué personaje debo generar en PHP para que el bloc de notas lo reconozca como un personaje válido de fin de línea? (\ n) obviamente no hace el trabajo.

Use “\ r \ n”. (con comillas dobles)

Lo anterior son los caracteres ascii para retorno de carro + avance de línea.

Históricamente, esto se relaciona con los primeros días de la informática en teletipos cuando la salida se imprimía en papel y devolver el carro del cabezal de teletipo al inicio de la línea era una operación separada para pasar una línea a través de la impresora. Puede sobrescribir líneas simplemente haciendo un retorno de carro e inserte líneas en blanco con solo un salto de línea. Al hacer ambas cosas, devolvió la cabeza al inicio de la línea y le dio una nueva línea para imprimir.

Lo que se requería exactamente difería entre los sistemas:

  • Solo alimentación de línea: – la mayoría de los sistemas similares a Unix
  • Retorno de carro más avance de línea: – Sistemas basados ​​en DEC y MS-DOS
  • Solo retorno de carro: – Principios del sistema operativo Apple / Mac

Entonces, lo que está generando en este momento es una nueva línea en un sistema Unix solamente. Wikipedia tiene una página bastante buena sobre esto.

En realidad, hay herramientas de línea de comandos de Unix para realizar la conversión. Los comandos unix2dos y dos2unix convierten archivos de texto ASCII hacia atrás y hacia adelante entre los formatos UNIX y DOS convirtiendo el avance de línea a avance de línea más retorno de carro y viceversa.

¡Asegúrese de usar comillas dobles alrededor del \ r \ n, no las comillas simples como se menciona en la respuesta anterior!

Experimenté el mismo problema. Más tarde reemplacé
comillas simples ' con comillas dobles " construyendo $ variable de contenido .

es decir, mantener las comillas externas en lugar de solo en $ variable de contenido .

Y funcionó 🙂