12
votes

PHP générant CSV n'envoie pas de nouvelles flux de ligne correctes

J'ai un script qui génère un fichier CSV à l'aide du code suivant: xxx

La variable de contenu $ contient simplement des lignes avec des champs séparés par des virgules, puis finalisées avec. "\ n"; Pour générer une nouvelle ligne.

Lorsque j'ouvre le fichier en CSV, il a l'air bien, lorsque j'essaie d'utiliser le fichier à importer dans un programme externe (MyOB), il ne reconnaît pas la fin de la ligne ( \ n) caractère et suppose une longue ligne de texte.

Lorsque j'en affiche le contenu du fichier dans le bloc-notes, le caractère de fin de ligne (\ n) est une petite boîte rectangle qui ressemble au code de caractère 0x7F.

Si j'ouvre le fichier et que je l'enregistre dans Excel, il supprime ce caractère et le remplace par un caractère de fin de ligne et je peux importer le fichier.

Quel personnage dois-je générer en PHP pour que le bloc-notes le reconnaisse comme un caractère de fin de ligne valide? (\ n) évidemment ne fait pas le travail.


0 commentaires

3 Réponses :


20
votes

Utilisez "\ r \ n". (avec des citations doubles)

Ce qui précède est les caractères ASCII pour le retour de chariot + l'alimentation en ligne.

Historiquement, cela concerne les premiers jours de calcul sur les télétypes lorsque la sortie a été imprimée sur du papier et le renvoyer le chariot de la tête de tétype vers le début de la ligne était une opération distincte pour alimenter une ligne via l'imprimante. Vous pouvez écraser les lignes en faisant un retour de chariot et insérez des lignes vides par une seule alimentation en ligne. Faire tous les deux renvoyés la tête au début de la ligne et la nourrir une nouvelle ligne à imprimer.

Quelle était exactement requise différaient entre les systèmes -

  • Feuille de ligne uniquement: - La plupart des systèmes similaires à unix
  • Retour de chariot Plus Flux de ligne: - Dec AMD Systems basé sur MS-DOS
  • Retour de chariot uniquement: - Première Apple / Mac OS's

    Alors, ce que vous générez au moment est une nouvelle ligne sur un système UNIX uniquement. Wikipedia a tout à fait un bonne page à ce sujet.

    Il y a des outils de ligne de commande UNIX pour faire la conversion aussi. Les commandes UNIX2DOS et DOS2UNIX convertissent les fichiers texte ASCII en arrière et vers l'avant entre les formats UNIX et DOS en convertissant une alimentation en ligne vers la ligne d'alimentation en ligne et le retour du chariot et la Vica Versa.


0 commentaires

5
votes

Assurez-vous d'utiliser des guillemets doubles autour du \ R \ N, pas des citations simples telles que mentionnées dans la réponse précédente!


0 commentaires

1
votes

J'ai expérimenté le même problème. Plus tard j'ai remplacé
citations simples ' avec doubles citations " Construire $ Content variable.

I.e. Garder les citations extérieures plutôt doubles que la célibataire dans $ Content variable.

et cela a fonctionné :)


0 commentaires