Guten Tag,
Wie schaffe ich es _nun_, die 3 Informationen $vorname, $familienname und
$text da getrennt rauszufiltern und weiterzuverarbeiten? Die Textumbrüche
dürfen dabei _nicht_ verloren gehen, der Text soll so, wie ihn der User
eingegeben hat, aus der .csv-Datei übernommen werden und in eine DB
gespeichert werden.
Du solltest auf den seltsamen Trenner (###) verzichten und tatsächlich ein Komma-, meinetwegen auch semikolonsepariertes, Format verwenden, welches du mit fgetcsv() und fputcsv() deutlich leichter bearbeiten kannst, als mit explode(). Zeichen, die dabei eine Mehrbedeutung haben, z.B. der Zeilenumbruch, musst du dabei so escapen, dass diese ihre Mehrbedeutung verlieren, z.B. könntest du urlencode()/urldecode(), base64_encode()/base64_decode() oder pack()/unpack() verwenden.
Mal schnell als Beispiel runtergetippt (bedarf auf jeden Fall noch besserer Ausnahmebehandlung):
<?php
$values[] = array('Zeile 1, Zelle 1', 'Zeile 1, Zelle 2', "Zeile 1, Zelle 3\n mit Umbruch");
$values[] = array('Zeile 2, Zelle 1', 'Zeile 2, Zelle 2', 'Zeile 2, Zelle 3');
$h = fopen('tmp.csv', 'w+');
foreach($values as $line)
{
// in $line befindet sich nun ein array
array_walk($line, 'sanitize_csv');
fputcsv($h, $line, ';', '"');
}
fclose($h);
readfile('tmp.csv');
function sanitize_csv(&$value, $index)
{
$value = urlencode($value);
}
?>
$ php -f csv.test.php
Zeile+1%2C+Zelle+1;Zeile+1%2C+Zelle+2;Zeile+1%2C+Zelle+3%0A+mit+Umbruch
Zeile+2%2C+Zelle+1;Zeile+2%2C+Zelle+2;Zeile+2%2C+Zelle+3
Gruß
Christoph Jeschke
Zend Certified Engineer
Certified Urchin Admin