web-dev-qa-db-fra.com

fgetcsv ne parvient pas à lire la ligne se terminant par un fichier csv au format mac, une meilleure solution?

J'analysais un fichier csv en utilisant php avec la fonction fgetcsv. Il a analysé tout le contenu dans une ligne, plus tard j'ai trouvé, csv contient le retour carraige comme "\ r". J'ai vu - il a déjà été signalé comme bogue php. J'ai résolu cela en définissant la configuration d'exécution php qui est -

ini_set("auto_detect_line_endings", "1");

existe-t-il une autre solution ou est-ce la bonne façon?

Merci

63
Musa

Réglage auto_detect_line_endings est explicitement recommandé par la documentation php .

Cependant, je ne peux pas comprendre pourquoi vous voudriez délimiter les lignes avec \r en 2010. Si possible, convertissez-les au style UNIX \n.

32
phihag

Les fins de ligne \r Sont créées par Microsoft Excel lors de l'enregistrement en tant que fichier CSV, il n'y a donc pas grand-chose à contourner si vous commencez avec une feuille de calcul Excel.

L'utilisation de auto_detect_line_endings Fonctionne bien, ou vous pouvez normaliser les fins de ligne avec preg_replace("/\r\n|\n\r|\n|\r/", "\n", $subject);

5
spekary