Wie kann ich die von fputcsv verwendeten Zeilenendungen ändern?

7

Ich erstelle eine CSV-Datei, die von unserem Kunden mit

heruntergeladen werden kann %Vor%

und mit fputcsv() Daten in eine CSV-Datei schreiben, die vom Client heruntergeladen wird.

Ich verwende PHP unter Linux und folglich werden die Zeilenenden von vielen Windows-Anwendungen nicht interpretiert.

Ich könnte die CSV-Datei in ein Verzeichnis auf dem Server schreiben, sie wieder einlesen und eine str_replace() von \n bis \r\n ausführen, aber das scheint eine ziemlich kluge Art zu sein, das Problem zu lösen. Gibt es eine Möglichkeit, die Konvertierung durchzuführen, ohne eine physische Datei zu erstellen?

    
Kalessin 04.10.2012, 08:08
quelle

4 Antworten

17

Sie können Stream-Filter verwenden, um dies zu erreichen. Dieses Beispiel schreibt in eine physische Datei, aber es sollte auch für php://output funktionieren.

%Vor%     
Ja͢ck 04.10.2012, 08:52
quelle
2

Nicht sicher, ob Sie das mit PHP selbst tun können. Es mag eine Möglichkeit geben, PHPs EOL für das Schreiben von Dateien zu ändern, aber es ist wahrscheinlich systemabhängig. Sie haben kein Windows-System, das Sie anpingen könnten, oder? ;)

Wie bei einer echten Lösung können Sie anstelle von str_replace zeilenweise das Linux-Programm unix2dos (inverse von dos2unix ) verwenden, vorausgesetzt, Sie haben es installiert:

%Vor%     
Explosion Pills 04.10.2012 08:41
quelle
1
  1. Erstellen Sie die Datei mit \ n Zeilenendungen auf einem Linux-Rechner
  2. Übertragen Sie die Datei als ASCII von der Linux-Maschine an eine Windows-Maschine
  3. Hey, presto! Alle Zeilenenden sind jetzt \ r \ n in der Datei auf der Windows-Maschine
Wandering Zombie 18.06.2013 22:56
quelle
-1

Anstatt die Datei zu schreiben, ist eine bessere Lösung die Verwendung der Ausgabepufferung

%Vor%     
Tom B 13.05.2014 12:17
quelle

Tags und Links