Vinzenz Mai: PHP Problem - fgetcsv

Beitrag lesen

Hallo Christoph,

danke für den Test. Ich bin verblüfft. Im Changelog habe ich dazu nichts
gefunden und auch die Bugliste zu fgetcsv() weiß nichts davon.

erst mal vielen Dank für das Eintragen in die Bugliste. Das hätte ich mir sonst für heute vorgenommen :-)

wäre dieses Verhalten ein Bug, denn leere Einträge sind in CSV-Dateien #
normal und eine Funktion, die mit CSV-Dateien umgehen können will, muss mit
leeren Einträgen korrekt umgehen können. Weglassen ist kein korrekter
Umgang.

Streng genommen müssen Felder auch Zeichen enthalten (so sagt es RFC4180). Andererseits verstößt das Verhalten gegen RFC793.

Nein, RFC4180 erlaubt leere Einträge, schauen wir es uns an:

<zitat quelle = RFC4180, Abschnitt 2>
   file = [header CRLF] record *(CRLF record) [CRLF]
   header = name *(COMMA name)
   record = field *(COMMA field)
   name = field
   field = (escaped / non-escaped)
   escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
   non-escaped = *TEXTDATA
<zitat>

mit RFC2234, in der die Augmented Backus-Naur-Form spezifiziert wird:

<zitat quelle = RFC2234, Abschnitt 3.6>
   Default values are 0 and infinity so that *<element> allows any
   number, including zero; 1*<element> requires at  least  one;
</zitat>

Da nun entweder *TEXTDATA oder DQUOTE *(TEXTDATA / ...) DQUOTE gilt, folgt, dass leere Einträge erlaubt sind, was sinnvoll und notwendig ist.

Freundliche Grüße

Vinzenz