2010-04-30 657 views
12

Tengo un script que genera un archivo CSV usando el siguiente código:PHP que genera csv no enviar correcta nueva línea alimenta

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 finalizó con. "\norte"; para generar una nueva línea

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

Cuando veo los contenidos 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é carácter debo generar en PHP para que el bloc de notas lo reconozca como un carácter de fin de línea válido? (\ n) obviamente no hace el trabajo.

Respuesta

20

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 computación en teletipos cuando la salida se imprimía en papel y devolver el carro de la cabeza 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 precisamente se requiere difirieron entre sistemas - solamente

  • Salto de línea: - más sistemas Unix
  • retorno de carro más avance de línea: - DIC amd MS-DOS sistemas basados ​​
  • carro devolver sólo : - Principios de Apple/Mac OS

Entonces, lo que está generando en este momento es una nueva línea en un sistema Unix solamente. Wikipedia tiene bastante good page en 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 al convertir el avance de línea en avance de línea más retorno de carro y VICA en sentido contrario.

4

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

0

Tuve el mismo problema. Más tarde reemplacé
comillas simples ' con comillas dobles " edificio variable contenido.

es decir, mantener las comillas externas en lugar de las dobles en $ content variable.

Y funcionó :)

Cuestiones relacionadas