Eike: Formular->Datenbank->"falsche Ausgabe des textes"

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?

  1. 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

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. $neuerText = eregsub("\n","<BR>",$alterText);

      ist Dein Feund.

      1. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. 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.

          1. 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

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
        2. [...] 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 ?

          1. 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

            --
            Nichts ist schwerer einzureißen als die Mauer in den Köpfen.
            1. 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

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
            2. Korrekterweise müsste ein RegEx lauten '/\015\012|\015|\012/'

              ack

      2. hi,

        $neuerText = eregsub("\n","<BR>",$alterText);

        ist Dein Feund.

        und was ist mit \r?

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. und was ist mit \r?

          Loesung 1:

          ereg_replace("\r","");

          Loesung 2: (empfohlen)

          ereg_replace("WIN[95|98|2000|XP]","Linux");

  2. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau