Signatur
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 alsnull.
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
'' 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);
Semikolon-Trennzeichen und Felder mit Leerzeichen
<?php
$line = '"Müller, Hans";Entwickler;"Berlin, Deutschland"';
$fields = str_getcsv($line, ';');
print_r($fields);
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);
// 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.