Bearbeiten von string aus textarea
Powl
- php
Hallo,
Ich bekomme aus einer Textarea Daten übermittelt (wie ungewöhnlich ;) )
Das erscheint dann in der Variablen $_POST['text'] ca. so:
Zeile 1
Zeile 2
Zeile 3...
Da ich jede Formularauswertung in einer Zeile einer Datei speichern möchte, habe ich versucht diese Daten wie folgt darzustellen:
Zeile1 <br />Zeile2 <br />Zeile3 <br />...
Nicht so einfach wie ich dachte. Mit
$_POST['text'] = nl2br($_POST['text']);
erhalte ich
Zeile1 <br />
Zeile2 <br />
Zeile3 <br />
$_POST['text'] = str_replace("\n", "<br />", $_POST[$key]);
hat den gleichen Effekt. (Verwundert mich auch kaum).
$br=chr(13).chr(10);
$_POST['text'] = str_replace($br, "<br />", $_POST[$key]);
funktioniert auch nicht wie gewünscht. Ich habe mir nun folgendermaßen geholfen: erst forme ich um mit
br=chr(13).chr(10);
$_POST[$key] = str_replace($br, "[%br%]", $_POST[$key]);
Dann erhalte ich:
Zeile 1[%br%]Zeile 2[%br%]Zeile 3...
wie erhofft in einer Zeile. Das kann ich dann so abspeichern. Danach lese ich den file() wieder ein und ersetze mit
$var[$key] = str_replace("[%br%]", "<br />", $var[$key]);
den Platzhalter.
Ja, es funktioniert. Ich frage mich nur, ob es nicht auch einfacher und weniger um die Ecke geht. Ich weiß im Moment nicht, wo ich noch ansetzen kann. Hat da jemand eine bessere Idee?
netten Tag
^da Powl
hallo Powl,
Zeile1 <br />Zeile2 <br />Zeile3 <br />...
Das ist offenbar das Ergebnis, das du gerne haben möchtest.
Nicht so einfach wie ich dachte. Mit
$_POST['text'] = nl2br($_POST['text']);
erhalte ich
unerwünschte Zeilenumbrüche, deren Herkunft dir unbekannt ist. Dazu zwei Dinge: $_POST ist eine vordefinierte Variable, die du zwar tatsächlich so modellieren kannst, aber doch besser nicht ändern solltest, auch nicht durch Modifizierung ihres Inhalts. Übergib ihren Inhalt an eine eigene Variable. Und das mit den Zeilenumbrüchen könnte sich auf folgende Weise gleich mit erledigen lassen:
$string = nl2br(rtrim($_POST['text']));
$_POST[$key] = str_replace($br, "[%br%]", $_POST[$key]);
könntest du dir damit vermutlich sparen.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Dazu zwei Dinge: $_POST ist eine vordefinierte Variable, die du zwar tatsächlich so modellieren kannst, aber doch besser nicht ändern solltest, auch nicht durch Modifizierung ihres Inhalts.
Warum?
$string = nl2br(rtrim($_POST['text']));
Damit ist das Problem des OP aber nicht gelöst - der String enthält immernoch die Zeilenumbrüche ...
Grüße aus Nürnberg
Tobias
hallo Tobias,
$string = nl2br(rtrim($_POST['text']));
Damit ist das Problem des OP aber nicht gelöst - der String enthält immernoch die Zeilenumbrüche ...
Die <br /> sind drin, aber wenn ich ihn richtig verstanden habe, sollen die ja auch bleiben. Im übrigen hatte ich bei der Neufassung der Zitatesammlung genau dasselbe Problem - bei der Eintragung eines neuen Vorschlags gab es unerwünschte Umbrüche in der Datenbank. Das habe ich nach diesem Schema beheben können, es ist dann nicht nötig, mit str_replace() rumzumurkeln.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
$string = nl2br(rtrim($_POST['text']));
Damit ist das Problem des OP aber nicht gelöst - der String enthält immernoch die Zeilenumbrüche ...
Die <br /> sind drin, aber wenn ich ihn richtig verstanden habe, sollen die ja auch bleiben.
Der OP will alle \n im String durch <br /> ersetzen - genau das macht nl2br() aber nicht.
Im übrigen hatte ich bei der Neufassung der Zitatesammlung genau dasselbe Problem - bei der Eintragung eines neuen Vorschlags gab es unerwünschte Umbrüche in der Datenbank.
Warum unerwünscht? In der Datenbank stören die Zeilenumbrüche doch nicht ...
Grüße aus Nürnberg
Tobias
Hallo,
Danke für Eure Antworten. nl2br geht so in der Tat nicht. Zwar sind dann die <br /> tags am Platz, aber wie erwähnt - die Zeilenumbrüche bleiben.
Mit rtrim hatte ich keinen Erfolg (PHP5).
Also habe ich nach nl2br mittels string replace die Zeilenumbrüche entfernt. Spare mit so den [%br%] Platzhalter, aber mehr auch nicht. Das ganze Konstrukt in ein Array einlesen und impodieren zu lassen ist irgendwie auch nicht weniger umweg.
Wollte ich nur eben mitgeteilt haben. Danke Euch nochmals.
netten Tag
^da Powl