Hallo Ingo,
Warum liest Du die Zeilen nicht einfach zeilenweise z.B. über file() ein?
Das bringt doch auch nichts, weil file() mit dem voreingestellten Zeilenumbruch oder sogar mit autodetect_line_endings arbeitet. Das würde das Problem nur verlagern.
Die Idee, die Restzeile anzufügen an die vorherige finde ich da schon ausgesprochen gut.
Das geht doch mit der fgetcsv()-Funktion und einem foreach() fast automatisch, wenn die Datei komplett zweimal in den Speicher passt, also z.B. ca. 3MB nicht übersteigt. Wenn die Zeilen zu kurz werden aber dafür mehr, dann ist diese Grenze eher erreicht, weil PHP sehr viel Overhead für Arrays erzeugt.
Also Datei mit fgetcsv() einlesen in ein Array. Es entsteht dann ein Array von Arrays (Zeilen und Spalten).
Das geht man mit foreach() durch und immer dann, wenn die Anzahl Elemente zu einem Zeilenindex nicht passt, muss man seine Fallunterscheidung starten und schauen, ob es nach dem Zusammenklatchen mit dem Vorgänger oder Nachfolger-Zeilenelement dann stimmt.
Das könnte klappen, wenn nur ein Zeilenumbruch in einer solchen Zelle enthalten ist.
Wenn es zwei werden, oder aber in mehreren Zellen welche enthalten sind, dürften die Freiheitsgrade für einen reperaturversuch schon zu viele sein...
LG
Chris©