Créer des retours de chariot dans la cellule csv via php
j'essaie de générer dynamiquement un fichier csv avec certaines cellules qui contiendront plusieurs lignes, le champ d'adresse par exemple devra être regroupé dans une seule cellule" adresse " au lieu de l'adresse,de la ville,de l'état, etc. Tout se passe bien, mais depuis deux jours j'ai essayé d'insérer r, rn, n, chr(10),chr (13), ainsi qu'un retour chariot dans le code pour créer le retour chariot que je cherche dans la cellule. Tous ces échoue, soit littéralement imprimé dans mon csv comme "R " etc ou quand je fais un retour manuel de chariot dans le code il génère une nouvelle rangée. Je l'utilise pour créer les bris dans mes cellules mais ça ne marche pas
$groupedCell = implode('r',$data);
je suis assez sûr que le code est correct comme son emplacement R où je voudrais un retour de chariot, mais pas le retour réel que je cherche. J'ai essayé quelques encodages différents mais toujours pas de chance, je teste en Open Office qui je suppose pourrait être le problème mais je suppose qu'il peut gérer les retours de chariot dans une cellule et je n'ai vu aucune documentation à l'appui du contraire. Merci pour la lecture!
3 réponses
, Vous devez utiliser "\r"
. Vous ne pouvez pas utiliser des caractères échappés (à part \'
) dans des chaînes de caractères simples. '\n'
et '\r'
sont des antislash littéraux suivis d'un n
ou r
, tandis que "\n"
et "\r"
sont respectivement des lignes et des retours de chariot.
quant à l'insertion de nouvelles lignes dans votre fichier CSV, c'est à votre mise en œuvre. Il n'y a pas de norme pour CSV, donc vous aurez à comprendre quel format à utiliser sur la base du système auquel vous fournissez les données CSV. Certains pourraient accepter une séquence '\n'
et l'interpréter comme une nouvelle ligne, d'autres pourraient permettre une nouvelle ligne littérale à condition que la cellule est enfermée entre guillemets, et d'autres encore n'accepteront pas du tout de nouvelles lignes.
le CSV spec est celui que je trouve mis en œuvre de nombreuses façons différentes... il semble fondamentalement comme il est seulement à moitié speced ce qui est frustrant étant donné sa popularité.
pour inclure une nouvelle lignée dans une cellule D'un CSV, il peut être nécessaire d'envelopper la cellule, ou la nouvelle lignée peut devoir être échappée. Vous remarquerez qu'il y a trois façons de le faire à partir du doc relié - et les différents programmes le traitent différemment:
- Excel enroule toute la cellule en double guillemets: une cellule peut avoir (sans escapade) des caractères newline à l'intérieur et être considéré comme une seule cellule, tant qu'il est enveloppé dans des doubles guillemets (notez aussi que vous aurez besoin d'utiliser le style excel double guillemet s'échapper dans le contenu de la cellule)
- autres programmes insérez un seul antislash avant le caractère, donc une ligne se terminant par
\
n'est pas considérée comme la fin d'une ligne, mais un caractère newline à l'intérieur de la cellule. Un la cellule peut avoir des caractères de newline sans escapade à l'intérieur aussi longtemps qu'ils sont précédés par le caractère backslash. - D'autres encore remplacent une nouvelle ligne avec un caractère de style C s'échappant, la séquence de caractères réelle
\n
ou\r\n
. Dans ce cas, la cellule a complètement échappé les caractères newline.
le problème est aggravé par le besoin potentiel d'échapper aux caractères de contrôle (ainsi qu'à d'autres contenus (par exemple "
dans #1, et \
in #2+3) et différents styles d'évasion (par ex. une citation imbriquée pourrait être échappé comme: double double citation ""
ou antislash - double citation \"
)
mon conseil : générer un document open-office avec plusieurs lignes et des caractères clés d'échappement et voir comment open-office génère un fichier CSV
. De là, vous pouvez décider laquelle des méthodes ci-dessus à utiliser pour les nouvelles lignées à l'intérieur des cellules, et quelle méthode d'évasion.
exemple de style-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
exemple de style-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
exemple de style-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991
- a créé une feuille de travail Excel 2010 avec 3 colonnes.
- a ajouté une ligne de titre avec des valeurs littérales: un, deux, trois
- a ajouté une ligne de données avec des valeurs littérales: abc, abc, abc sauf que dans la deuxième colonne j'ai appuyé ALT+ENTER après chaque lettre pour créer un retour de chariot et un flux de ligne.
- a enregistré comme > autre et a choisi CSV tout en ignorant les Avertissements.
- a examiné les données CSV en utilisant NOTEPAD++ et cliqué sur le bouton Afficher tous les caractères dans la barre d'outils.
on peut voir ce qui suit:
one, two, three[CR][LF]
abc,"a[LF]
b[LF]
c",abc[CR][LF]
espérons que cela apporte plus de clarté.