Ausgezeichnete Antwort. Ich habe CSVs vom Benutzer mit \r-Zeilenenden hochgeladen (ich habe keine Ahnung warum) und musste vor dem Analysieren von CSV strreplace. Da str_getcsv nicht mehrere Zeilen verarbeitet und einige Zeilen neue Zeilen enthalten, funktioniert dies (während es hackisch ist, Dinge in eine temporäre Datei zu stecken, nur damit PHP sie parst).
– csga5000
30. Mai 2015 um 21:30 Uhr
fgetcsv sollte in der Lage sein, dies richtig zu analysieren.
Ich würde sowieso nicht empfehlen, dies von Hand zu tun, es gibt viele solcher Fallstricke beim Parsen von CSV.
Das Problem ist, dass ich fgets read line from file dann str_getcsv verwendet habe, um die Zeichenfolge zu analysieren, anstatt nur fgetcsv zu verwenden. Es funktionierte gut mit einzeiligen Spalten, aber nicht mit mehrzeiligen. Sogar hartes PHP.net sagt, dass fgetcsv “Gets line from file” scheint, dass “line” hier nicht die tatsächliche Zeile in der Nur-Text-Datei ist, sondern die gesamte tatsächliche Zeile mit allen mehrzeiligen Daten.
– Ergec
19. Januar 2011 um 12:50 Uhr
Ich bin heute mit dem gleichen Thema gekommen und habe ein wenig gemacht Prüfungdas beweist deine Aussage über Linien in Bezug auf csv-Zeilen und nicht zu tatsächlich Dateizeilen.
– Raul
25. März 2013 um 12:22 Uhr
Ich hatte gehofft zu verwenden str_getcsv da nicht die gesamte Datei in den Speicher geladen werden muss, sondern nur die Zeile, die rot ist. fgetcsv funktioniert mit mehrzeiligen CSV-Feldern, aber str_getcsv offenbar nicht.
– Erfan
19. Dezember 2018 um 3:33 Uhr
@Erfan fgetcsv liest auch nur jeweils eine Zeile aus einem geöffneten Dateihandle …!?
– verzeihen ♦
19. Dezember 2018 um 6:26 Uhr
Oriadam
Basierend auf der Antwort von StanleyD, aber Verwendung eines temporären Speicherblocks (anstatt auf die Festplatte zu schreiben) für eine bessere Leistung:
$fp = fopen('php://temp','r+');
fwrite($fp, $CsvString);
rewind($fp); //rewind to process CSV
while (($row = fgetcsv($fp, 0)) !== FALSE) {
print_r($row);
}
Hier ist eine schnelle und einfache Lösung mit der PHP-Funktion str_getcsv()
Stellen Sie sich eine Situation vor, in der Sie eine Funktion benötigen, die sowohl mit URL als auch mit kommagetrenntem Text funktioniert. Das ist genau die Funktion, die so funktioniert. Fügen Sie einfach eine CSV-URL oder einen kommagetrennten Text ein und es funktioniert gut.
10313200cookie-checkSo analysieren Sie CSV in PHP mit mehrzeiligen Daten in einer Spalteyes
@goreSplatter, oder verwende einfach einen vorhandenen.
– Bart Kiers
19. Januar 2011 um 8:18 Uhr
@Bart Entschuldigung, ich habe die andere offensichtliche Lösung ausgelassen.
– Linus Kleen
19. Januar 2011 um 8:21 Uhr
mögliches Duplikat der Parse-CSV-Datei php
– aussen
26. Dezember 2011 um 7:36 Uhr