PHP: fputcsv und die Anführungszeichen

Jeder, der einmal mit PHP eine CSV erstellt hat, weiß wie verrückt fputcsv funktioniert und wie wenig man damit eigentlich anstellen kann. Deshalb wechseln viele von fputcsv schnell nach fputs oder fwrite. Hier im Beitrag findest du einen kurzen Schnipsel, den du einfach mit deinem fputcsv austauschen kannst. In unserem Beispiel wollen wir eine CSV ohne Anführungszeichen erstellen, die fputcsv uns leider immer automatisch setzt und die man nicht loswerden kann.

Schnipsel

Hier findest du jetzt zwei Schnipsel. Einmal den Ursprung, den wir ersetzen wollen, allerdings dann ohne Anführungszeichen. Im Netz findest du hierzu viele Lösungen, bspw. eine 0 anstelle von “ setzen. Oder direkt einen leeren String als Enclosure verwenden. Wir wollen aber gar keine Anführungszeichen und auch keine Leerzeichen in unseren CSV-Spalten.

Ursprung

fputcsv($file, $row, ";", '"');Code-Sprache: PHP (php)

Hier im Beispiel haben wir die Anführungszeichen jetzt als Enclosure gesetzt. Wenn wir die nicht setzen, setzt fputcsv die uns trotzdem. Man wird sie nicht los, außer man ersetzt sie.

Lösung

fputs($file, implode(";", $row) . "\n");Code-Sprache: PHP (php)

Hier haben wir unsere korrekten Trennzeichen und schreiben die $row so, wie sie ist, ohne Anführungszeichen. Das ist nützlich, wenn du eine CSV-Datei für den Import von DPD erstellen musst. Eine bessere Lösung gibt es mit fputcsv nicht, da jede Lösung ungewollte Sonderzeichen als Enclosure setzt.

Wenn du im Netz nach Lösungen suchst, wirst du auf folgende Lösungen stoßen:

fputcsv($file, $row, ";", chr(0));
fputcsv($file, $row, ";", ' ');
fputcsv($file, $row, ";", chr(127));Code-Sprache: PHP (php)

Das Problem ist hier, dass der Inhalt chr(0) trotzdem in die CSV gesetzt wird. In den meisten Fällen hast du als unerwünschte Leerzeichen oder komische Zeichen, die dann am Ende nur für noch mehr Probleme sorgen. Wenn du das Problem mit der fputs-Variante löst, hast du kein Problem mehr.