Formular->Datenbank->"falsche Ausgabe des textes"
Eike
- php
Moin,
mein problem ist es einen in einer Datenbank gespeicherten Text richtig mit den zeilenumbruechen wiederzugeben.
Ich hab ein <textarea> feld. Da gibt der User etwas ein. Dies wird zur Db geschickt(gespeichert).
Eine andere Seite liest den text von dort aus.
(wie Gaestebuch). Beispiel text:
User gibt ein:
Hallo
Wie gehts?
ausgegeben wird:
Hallo Wie gehts?
Kein Zeilenumbruch.
aber in der Db ist der Text mit Zeilenumbruechen. Und wenn ich den text mit <pre> ausgebe sind auch welche vorhanden. Das Problem bei <pre> ist nur, dass die Textgroeße nicht stimmt und das anders aussieht als normaler text. Wie Schreibmaschine.
Was muss ich machen?
hi,
Was muss ich machen?
zeilenumbrüche in <br> (bzw. <br />) umwandeln, was sonst?
unter PHP beispielsweise gibt es dafür die funktion nl2br().
btw: weißt du, wie oft diese frage hier gestellt wird? nächstes mal bitte vorher einen blick ins archiv werfen, danke.
gruß,
wahsaga
$neuerText = eregsub("\n","<BR>",$alterText);
ist Dein Feund.
Hello,
$neuerText = eregsub("\n","<BR>",$alterText);
ist Dein Feund.
Das ist aber nicht unbedingt notwendig, so eine teure Funktion zu verwenden. Und es ist auch nicht unbedingt ratsam, die "\n" gegen die <br /> auszutauschen, da ja ein <br /> auch im Quelltext die ideale Stelle für einen Zeilenumbruch ist. Vielleicht möchte man den auch lesen können.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Das ist aber nicht unbedingt notwendig, so eine teure Funktion zu verwenden. Und es ist auch nicht unbedingt ratsam, die "\n" gegen die <br /> auszutauschen, da ja ein <br /> auch im Quelltext die ideale Stelle für einen Zeilenumbruch ist. Vielleicht möchte man den auch lesen können.
Und was waere denn ratsam, Deiner Meinung nach ?
Das geschilderte Problem wird mit dem re wenigstens geloest.
Hello,
Und was waere denn ratsam, Deiner Meinung nach ?
Die dafür vorgesehene Funktion nl2br() zu verwenden ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
[...] da ja ein <br /> auch im Quelltext die ideale Stelle für einen Zeilenumbruch ist. Vielleicht möchte man den auch lesen können.
Ich versteh hier nicht, was Du meinst.
Macht nlbr nicht dasselbe wie mein re ?
Hallo sirdan,
Macht nlbr nicht dasselbe wie mein re ?
Nein. Dein RegEx erfasst nur "\n", es gibt aber plattformabhängig auch andere Zeilenumbrüche, nl2br() berücksichtigt dies im Übrigen. Korrekterweise müsste ein RegEx lauten '/\015\012|\015|\012/'. Mehr Details liefert dir eine Archivsuche.
Freundschaft!
Siechfred
Hello,
nur mal so nebenbei:
Ich habe gerade versucht, nach
\015\012|\015|\012
zu suchen. Da gab es kein Ergebnis. Aber es müssten mindestens 50 auffindbar sein.
Ich befürchte, dass das einen Eintrag in CKs Unlieblingsprogramm erfordert. Bitte schaut doch mal, ob das stimmt, oder ich einfach krumm gedacht habe.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Korrekterweise müsste ein RegEx lauten '/\015\012|\015|\012/'
ack
hi,
$neuerText = eregsub("\n","<BR>",$alterText);
ist Dein Feund.
und was ist mit \r?
gruß,
wahsaga
und was ist mit \r?
Loesung 1:
ereg_replace("\r","");
Loesung 2: (empfohlen)
ereg_replace("WIN[95|98|2000|XP]","Linux");
Hello,
bevor Du den Text in die DB schickst, muss er mit der für die DB passenden escpae-Funktion behandelt werden. Zeilenumbrüche werden da nämlich maskiert bzw. Codiert, damit die DB keinen Schaden nimmt. Also die von PHP ggf. automatisch hinzugefügten Maskierungen wieder entfernen und die für die Datenbank bassenden hinzufügen.
Bei der Wiedergabe dann immer auf das Ausgabeziel achten.
In der Textarea ist nur htmlentities($text) notwendig, damit da nicht z.B. aus Versehen mitten in der Textarea Tags auftauchen und im normalen Text nl2br(htmlentities($text)).
Harzliche Grüße aus http://www.annerschbarrich.de
Tom