Start · Sprachen · PHP · Referenz · str_getcsv

str_getcsv

Funktion

Parst einen CSV-formatierten String und gibt die enthaltenen Felder als Array zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

str_getcsv(string $string, string $separator = ',', string $enclosure = '"', string $escape = '\\'): array

Beschreibung

str_getcsv() analysiert einen einzelnen CSV-String und zerlegt ihn anhand des angegebenen Trennzeichens in ein Array. Im Gegensatz zu fgetcsv() arbeitet die Funktion direkt auf einem String, ohne eine Datei öffnen zu müssen – ideal für das Parsen von CSV-Zeilen, die bereits im Speicher vorliegen oder aus anderen Quellen stammen (z. B. Datenbank, API).

Das Einhüllungszeichen ($enclosure) ermöglicht es, Felder zu umschließen, die das Trennzeichen selbst enthalten. Das Escape-Zeichen ($escape) erlaubt es, Sonderzeichen innerhalb von Feldern zu maskieren. Seit PHP 8.4 wird ein leerer String als $escape-Wert akzeptiert, um jegliches Escaping zu deaktivieren.

Typische Anwendungsfälle sind das Verarbeiten einzelner CSV-Zeilen, das Parsen von Kopfzeilen oder das Einlesen kleiner CSV-Inhalte, die z. B. per HTTP empfangen wurden. Für ganze CSV-Dateien sollte stattdessen fgetcsv() mit einem Datei-Handle verwendet werden.

  • Leerzeichen in Feldern werden nicht automatisch entfernt.
  • Felder ohne Wert werden als Leerstring ('') zurückgegeben, nicht als null.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu parsende CSV-String. Typischerweise eine einzelne Zeile ohne abschließendes Zeilenumbruchzeichen.
$separator string , Das Trennzeichen zwischen den einzelnen Feldern. Muss genau ein einzelnes Zeichen sein (z. B. ',', ';' oder '\t' für Tabulatoren).
$enclosure string " Das Einhüllungszeichen, mit dem Felder umschlossen werden können. Muss genau ein einzelnes Zeichen sein. Standardmäßig das doppelte Anführungszeichen ".
$escape string \ Das Escape-Zeichen, mit dem Sonderzeichen innerhalb von Feldern maskiert werden. Muss ein einzelnes Zeichen oder ein leerer String sein. Ein leerer String deaktiviert das Escaping vollständig (empfohlen ab PHP 8.4).

Rückgabewert

Typ
array
Beschreibung
Gibt ein indiziertes Array zurück, das die geparsten Felder des CSV-Strings als Strings enthält. Leere Felder werden als Leerstring '' zurückgegeben. Die Funktion gibt im Fehlerfall kein false zurück – bei einem leeren Input-String wird ein Array mit einem einzigen Leerstring zurückgegeben.

Beispiele

Einfache CSV-Zeile parsen

<?php
$line = 'Max,Mustermann,42,München';
$fields = str_getcsv($line);
print_r($fields);
Array ( [0] => Max [1] => Mustermann [2] => 42 [3] => München )

Semikolon-Trennzeichen und Felder mit Leerzeichen

<?php
$line = '"Müller, Hans";Entwickler;"Berlin, Deutschland"';
$fields = str_getcsv($line, ';');
print_r($fields);
Array ( [0] => Müller, Hans [1] => Entwickler [2] => Berlin, Deutschland )

Mehrzeilige CSV-Datei Zeile für Zeile parsen

<?php
$csv = "Name,Alter,Stadt\nAnna,28,Hamburg\nBernd,35,Berlin";
$rows = array_map('str_getcsv', explode("\n", $csv));

// Erste Zeile als Header verwenden
$header = array_shift($rows);
$result = array_map(function(array $row) use ($header): array {
    return array_combine($header, $row);
}, $rows);

print_r($result);
Array ( [0] => Array ( [Name] => Anna [Alter] => 28 [Stadt] => Hamburg ) [1] => Array ( [Name] => Bernd [Alter] => 35 [Stadt] => Berlin ) )

// Wichtig · Fallstricke

Achtung bei mehrzeiligen CSV-Daten: str_getcsv() verarbeitet immer nur eine CSV-Zeile auf einmal. Felder, die echte Zeilenumbrüche enthalten (innerhalb von Einhüllungszeichen), werden bei einem explode("\n", ...)-Ansatz falsch aufgeteilt. Für solche Fälle sollte eine temporäre Datei oder ein Stream mit fgetcsv() verwendet werden.

Leerer Input: Bei einem leeren String als Eingabe gibt die Funktion [''] zurück (Array mit einem Leerstring), was zu unerwarteten Ergebnissen führen kann. Prüfe den Input daher vor der Verarbeitung.

Escape-Zeichen ab PHP 8.4: Es wird empfohlen, $escape auf '' zu setzen, um RFC-4180-konformes Verhalten zu erhalten, da das Standard-Backslash-Escaping in vielen CSV-Varianten nicht vorgesehen ist.