gooxsy: Kein Quelltext-Zeilenumbruch bei textarea-Übernahme

Hi,

das man die Funktion nl2br() verwenden muß, um Zeilenumbrüche in einer Textarea aus einem Formular zu übernehmen, ist bekannt.

Gibt es eigentlich auch eine Möglichkeit, daß mit obiger Funktion die <br />s gesetzt werden _und_ dabei aber die Sätze der Textarea im Quelltext in _einer_ Zeile stehen?

  
<?php  
echo"<p>".$_POST['name']." schreibt Folgendes:</p>\n";  
echo"<p>".$_POST['nachricht']."</p>\n";  
?>  

ergibt bei Eingabe von

++++++++++++++++++++++++++++++++++++++++++++
+                                          +

  • Satz 1.                                  +
  • Satz 2.                                  +
  • Satz 3.                                  +
    +                                          +
    ++++++++++++++++++++++++++++++++++++++++++++

in der Textarea die Ausgabe => Satz 1. Satz 2. Satz3.

Im Quelltext sieht es so aus =>

  
  <body>  
   <p>Hans schreibt Folgendes:</p>  
<p>Satz1.  
Satz2.  
Satz3.</p>  
  </body>  

  
<?php  
echo"<p>".$_POST['name']." schreibt Folgendes:</p>\n";  
echo"<p>".nl2br($_POST['nachricht'])."</p>\n";  
?>  

ergibt bei der gleichen Eingabe folgende Ausgabe:

Satz1.
Satz2.
Satz 3.

Im Quelltext sieht es so aus =>

  
  <body>  
   <p>Hans schreibt Folgendes:</p>  
<p>Satz1.<br />  
Satz2.<br />  
Satz3.</p>  
  </body>  

Was ich gerne hätte, wäre ein Ergebnis wie Fall 2 _und_ folgendes Quellcode-Aussehen:

  
  <body>  
   <p>Hans schreibt Folgendes:</p>  
   <p>Satz1.<br />Satz2.<br />Satz3.</p>  
  </body>  

Ist das möglich?

MfG

gooxsy

  1. Was ich gerne hätte, wäre ein Ergebnis wie Fall 2 _und_ folgendes Quellcode-Aussehen:
    Ist das möglich?

    Klar, nimm statt nl2br gleich eine vernünftige Funktion:
    http://php.net/manual/de/function.str-replace.php
    (5. Beispiel)

    ~JJ

    1. Hi Jaroslav,

      (5. Beispiel)

      was genau auf der Seite meinst Du?

      mfG

      gooxsy

      1. was genau auf der Seite meinst Du?

        // Reihenfolge von Ersetzungen
        $str     = "Zeile 1\nZeile 2\rZeile 3\r\nZeile 4\n";
        $order   = array("\r\n", "\n", "\r");
        $replace = '<br />';

        1. Hi Jaroslav,

          danke für den Verweis! Mir sind zwar momentan die Unterschiede zwischen \r, \n  und \r\n nicht _ganz_klar, aber nachdem ich jetzt mehrere Forumsbeiträge im Archiv gelesen habe, habe ich es so verstanden, daß php von sich aus nur ein \r dazuhängen würde für jeden Zeilenumbruch, den ein User in der Textarea macht, aber Windows noch ein \n dazugibt, weshalb somit dann bei jedem Zeilenumbruch ein \r\n steht. Um alle Eventualitäten abzudecken, wird bei dem angegebenen Beispiel sowohl \r, als auch \n und \r\n ersetzt. Wie gesagt, mir ist es noch nicht _ganz_ klar, aber ich verstehe den php-Code und verwende das ab jetzt so. Danke nochmals!

          mfG

          gooxsy

          1. Hello,

            danke für den Verweis! Mir sind zwar momentan die Unterschiede zwischen \r, \n  und \r\n nicht _ganz_klar, aber nachdem ich jetzt mehrere Forumsbeiträge im Archiv gelesen habe, habe ich es so verstanden, daß php von sich aus nur ein \r dazuhängen würde für jeden Zeilenumbruch, den ein User in der Textarea macht, aber Windows noch ein \n dazugibt, weshalb somit dann bei jedem Zeilenumbruch ein \r\n steht. Um alle Eventualitäten abzudecken, wird bei dem angegebenen Beispiel sowohl \r, als auch \n und \r\n ersetzt. Wie gesagt, mir ist es noch nicht _ganz_ klar, aber ich verstehe den php-Code und verwende das ab jetzt so. Danke nochmals!

            Es machen nicht Windows oder PHP, sondern es haben die Browser zu tun und zwar unabhängig von der Plattform, auf der sie laufen. Der Browser muss einen Zeilenumbruch in der Textarea mit "\r\n", also "0D 0A" in Hexadezimalschreibweise, signieren. Das ist die für HTML/HTTP geforderte Zeichenfolge.

            Die Browser, die ich kenne, ersetzen aber unvollständige Zeilenumbrüche durch vollständige. Ein einzelnes "\n" wird also genauso durch ein "\r\n" erstezt, wie ein einzelnes "\r".

            Um jetzt bei der Ersetzung in Deinem Script alle Zeilenumbrüche zu erwischen, musst Du also erst die vollständigen ersetzen und dann die eventuell noch vagabundiernden unvollständigen. Davon sollten allerdings bei funktionierenden Browsern gar keine vorhanden sein. Die Reihenfolge, ob dann erst "\n" erstezt wird oder erst "\r" sollte unerheblich sein.

            Ein harzliches Glückauf

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de