Adrian: Zeileumbruch in PHP aus MySQL

Hallo liebe Leute!

Ich habe in einer MySQL-Datenbank einen Volltext (Varchar) abgespeichert, und dieser wurde von Benutzern eingegeben, die natürlich als Zeilenumbruch dieses \lf oderso benutzen, also die Returntaste eben.

Jetzt hab ich aber das Problem, wenn ich das aufer Webseite weider ausgeben will, erkennt HTML diese ja nicht an, darum müsste ich jetzt alle Line Feeds durch <br>´s ersetzen. Soweit hab ich schonmal alleine gedacht ;)

Aber wie genau mache ich das jetzt? Was soll ich wo angeben? Hoffe mir kann jemand helfen, danke schonmal!

  1. Aber wie genau mache ich das jetzt? Was soll ich wo angeben? Hoffe mir kann jemand helfen, danke schonmal!

    Hi! Entweder du gehst dein komplettes Result durch oder du machst vor der Ausgabe ein str_replace("\n", "<br />\n", $mysqlzeile).

    das sollte es schon gewesen sein.

    Andi

    1. Aber wie genau mache ich das jetzt? Was soll ich wo angeben? Hoffe mir kann jemand helfen, danke schonmal!

      Hi! Entweder du gehst dein komplettes Result durch oder du machst vor der Ausgabe ein str_replace("\n", "<br />\n", $mysqlzeile).

      das sollte es schon gewesen sein.

      Andi

      Achso die Zeilenumbrücke in MySQL heissen auch \n ? Ich dachte die heissen immer \rf oder \lf oderso ôO wusste ich nich genau darum hab ich gefragt, ich probiers mal, wenns jemand genauer weiss kanner ja schreiben! Danke auf jeden Fall!

      Greetz

      Adrian

      1. Achso die Zeilenumbrücke in MySQL heissen auch \n ?

        ja, in PHP sind das \n und \r. Übrigens auch in Perl, Javascript und Java ;-)
        Und, keine Ursache ;-)

  2. Hallo,

    zum Abspeichern in der MySQL-Tabelle musst Du erstmal die passende Maskierung verwendet haben. Wenn PHP selbstständig Backslashes eingefügt hat (siehe get_magic_quotes_gpc() ), dann musst Du die erstmal wieder entfernen. Und vor der Übergabe des Textes an das SQL-Statement muss dieser mittels mysql_real_escape_string() maskiert werden.

    Nur so werden die Zeilenschaltungen vernünftig abgespeichert.

    Wenn Du sie dann wieder herausholst, sind die Maskierungen wieder verschwunden, da sie nur für die Schnittstelle gelten, und von dieser automatisch beim Einfügen der Daten entfernt wurden.

    Um den Text dann auszugeben, musst Du ihn entsprechend des Kontextes aufbereiten. In einer Textarea also mit

    htmlentities($text,ENT_QUOTES)

    und für die Darstellung im normalen HTML-Kontext

    nl2br(htmlentities($text,ENT_QUOTES))

    So müsste es dann klappen.
    Einrückungen mittels Leerzeichen, die bei der Eingabe in der textarea eingegeben wurden, sind nun noch verschwunden. Wenn es darauf ankommt, diktengleichen Text auszugeben, benutzt Du anstelle des nl2br() lieber ein

    echo "<pre>\n";
      echo htmlentities($text,ENT_QUOTES)."\n";
      echo "</pre>\n";

    Das sollte als Anregung erstmal genügen.

    LG
    Chris

    1. Hallo,

      zum Abspeichern in der MySQL-Tabelle musst Du erstmal ...
      Wenn Du sie dann wieder herausholst, ...
      Um den Text dann auszugeben, ...
      und für die Darstellung im normalen HTML-Kontext ...
      So müsste es dann klappen.

      Au weia, das gilt wohl dann sicherheitshalber auch gleich für kyrillische und japanische Zeichensätze auf gemischten Windows, Mac und Unix-Netzen?

      Also, bei mir ging es immer mit
      echo nl2br($row['text'])

      Okay, die Umlaute noch umsetzen, also ä = &auml; usw.

      LG Kalle

      1. Hallo,

        zum Abspeichern in der MySQL-Tabelle musst Du erstmal ...
        Wenn Du sie dann wieder herausholst, ...
        Um den Text dann auszugeben, ...
        und für die Darstellung im normalen HTML-Kontext ...
        So müsste es dann klappen.

        Au weia, das gilt wohl dann sicherheitshalber auch gleich für kyrillische und japanische Zeichensätze auf gemischten Windows, Mac und Unix-Netzen?

        Also, bei mir ging es immer mit
        echo nl2br($row['text'])

        Okay, die Umlaute noch umsetzen, also ä = &auml; usw.

        Wo ist Dein Problem?

        LG
        Chris