Mysql
 sql >> Database >  >> RDS >> Mysql

Creazione di ritorni a capo nella cella csv tramite php

Le specifiche CSV è uno che trovo implementato in molti modi diversi... praticamente sembra che sia solo a metà, il che è frustrante data la sua popolarità.

Per includere una nuova riga all'interno di una cella in un CSV, potrebbe essere necessario eseguire il wrapping della cella o potrebbe essere necessario eseguire l'escape della nuova riga. Noterai dal documento collegato che ci sono tre modi per farlo e diversi programmi lo trattano in modo diverso:

  1. Excel racchiude l'intera cella tra virgolette doppie:una cella può contenere caratteri di nuova riga (senza escape) ed essere considerata una singola cella, purché sia ​​racchiusa tra virgolette doppie (nota inoltre che dovrai usare lo stile excel virgolette doppie all'interno del contenuto della cella)
  2. Altri programmi inseriscono una singola barra rovesciata prima del carattere, quindi una riga che termina con \ non è considerata la fine di una riga, ma un carattere di nuova riga all'interno della cella. Una cella può contenere caratteri di nuova riga senza caratteri di escape purché siano preceduti dal carattere barra rovesciata.
  3. Altri sostituiscono ancora una nuova riga con caratteri di escape in stile C, la sequenza di caratteri effettiva \n o \r\n . In questo caso la cella ha completamente i caratteri di nuova riga di escape.

Il problema è aggravato dalla potenziale necessità di sfuggire ai caratteri di controllo (così come ad altri contenuti (ad es. " in #1 e \ in #2+3) e diversi stili di escape (ad es. una virgoletta incorporata potrebbe essere sottoposta a escape come:doppia virgoletta "" o barra rovesciata-virgoletta doppia \" )

Il mio consiglio :genera un documento open-office con più righe e caratteri di escape chiave e guarda come open-office genera un CSV file. Da lì puoi decidere quale dei metodi precedenti utilizzare per le nuove righe all'interno delle celle e quale metodo di escape.

esempio di stile-1 (excel):

#num,str,num
1,"Hello
World",1990
2,"Yes",1991

esempio di stile-2:

#num,str,num
1,Hello \
Word,1990
2,Yes,1991

esempio di stile-3:

#num,str,num
1,Hello \nWorld,1990
2,Yes,1991