Ragna: Probleme mit <br /> und textarea...

Hallo zusammen,

ich sitze seit ein paar Tagen an einem Problem, welches mich kirre macht...

Ich habe hier ein Script, mit dem ich bei Text-Eingaben xhtml-Code in BBCode umwandel - und bei der Ausgabe der Seite wieder zurück...

Bei allen erlaubten Tags (z.B. <p>, <strong>, <em>, ect...in [p], [b], [em], ect...) funzt das (vielleicht deswegen, weil diese Tags extra geschlossen werden müssen). Nur beim <br /> geht es einfach nicht. Es wird zwar als [br] in die DB geschrieben und die Rückwandlung auf der eigentlichen Ausgabeseite funzt auch - aber nicht die Ausgabe in einem Textfeld (z.B. wenn man die den Eintrag bearbeiten möchte). Dort wird immer [br] ausgegeben - bei mehreren breaks sogar eine Liste ([br</p><ul><li>[br]</li></ul>).

So versuche ich das <br /> in [br] umnwandel:

$text = str_replace('<br />', '[br]', $text);

Das funzt, [br] wird in die DB geschrieben...

So versuche ich wieder zurück zu wandeln:

$text = str_replace('[br]', '<br />', $text);

Das funzt nur auf der eigentlichen Webseite, nicht im Formular im Backend...

Als Editor verwende ich den TinyMCE, welcher ja sowieo Tags in die DB schreibt...

Ich habe jetzt hier gelesen, dass ich für einen Zeilenumbruch im Editor ein \n einfügen muss...nur dass bekomme ich noch weniger hin...

Was kann ich da ändern?

Besten dank

Ragna

  1. Hallo,

    es gibt eine Funktion namens nl2br.

    Gruß

    jobo

  2. Hello Ragna,

    So versuche ich wieder zurück zu wandeln:

    $text = str_replace('[br]', '<br />', $text);

    Das funzt nur auf der eigentlichen Webseite, nicht im Formular im Backend...

    Als Editor verwende ich den TinyMCE, welcher ja sowieo Tags in die DB schreibt...

    Ich habe jetzt hier gelesen, dass ich für einen Zeilenumbruch im Editor ein \n einfügen muss...nur dass bekomme ich noch weniger hin...

    Du wirst vermutlich ein generelles Problem haben, wenn Du einer Textarea als Inhalt HTML-Elemente übergibst. Das ist zumindest unüblich, wenn nicht mMn sogar VERBOTEN.

    Dafür gibt es die Funktion htmlspecialchars(), die für die Ausgabe in VALUEs die passende Codierung/Maskierung vornimmt.

    Lies Dir dazu bitte den Artikel durch
    http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Om nah hoo pez nyeetz, Ragna!

    möchtest du, dass in der Textarea
    a) ein Zeilenumbruch erfolgt oder
    b) der Text "<br />" geschrieben wird?

    Matthias

    --
    1/z ist kein Blatt Papier.

    1. Om nah hoo pez nyeetz, Ragna!

      möchtest du, dass in der Textarea
      a) ein Zeilenumbruch erfolgt oder
      b) der Text "<br />" geschrieben wird?

      Matthias

      Ich möchte es so haben dass in der Ausgabeseite (also im Frontend) ganz normal der gewandelte HTML-Code ausgegeben wird (wie es ja bei DB-INhalten so sein soll). Im Backend möchte ich einfach nur dass im Editorfenster dort ein Zeilenumbruch zu sehen ist, wo einer hinsoll. Wenn jetzt Änderungen vorgenommen wurden möchte ich aber, dass der Zeilenumbruch mit [br] in die DB geschrieben wird...

      nl2br habe ich schon probiert, aber keine Erfolge erzielen können, weiß aber auch nicht, ob ich es richtig gemacht habe...

      1. Om nah hoo pez nyeetz, Ragna!

        Ein harter Zeilenumbruch wird als "\r\n" codiert, du könntest also

        str_replace('[br]', '\r\n', ...

        verwenden, wenn du die Textarea befüllen möchtest.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Om nah hoo pez nyeetz, Ragna!

          Ein harter Zeilenumbruch wird als "\r\n" codiert, du könntest also

          str_replace('[br]', '\r\n', ...

          verwenden, wenn du die Textarea befüllen möchtest.

          Matthias

          Wenn es als

          [p][b]Zeile[br][br]Zeile[/b][/p]

          in der DB steht, und ich es per

            
          function bbcode_html($text)  
          {  
              $text = htmlentities($text, ENT_QUOTES, "UTF-8");  
            
              # Formatierungen  
              $text = str_replace('[br]', '\r\n', $text);  
              $text = preg_replace('#\[b\](.*)\[/b\]#isU', "<strong>$1</strong>", $text);  
              $text = preg_replace('#\[p\](.*)\[/p\]#isU', "<p>$1</p>", $text);  
              $text = preg_replace('#\[i\](.*)\[/i\]#isU', "<em>$1</em>", $text);  
              $text = preg_replace('#\[u_gelb\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline; color: #ffff00;\">$1</span>", $text);  
            
              $text = preg_replace('#\[color=(.*)\](.*)\[/color\]#isU', "<span style=\"color: $1\">$2</span>", $text);  
              $text = preg_replace('#\[u\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline;\">$1</span>", $text);  
            
              # Links  
              $text = preg_replace('#\[url\](.*)\[/url\]#isU', "<a href=\"$1\">$1</a>", $text);  
              $text = preg_replace('#\[ url=(.*)\](.*)\[/url\]#isU', "<a href=\"$1\">$2</a>", $text);  
            
              # Zitate  
              $text = preg_replace('#\[quote\](.*)\[/quote\]#isU', "<div class=\"zitat\">$1</div>", $text);  
            
              return($text);  
          }  
          
          

          auslese funkioniert das auch nicht, denn es wird so im Editor-Fenster ausgegeben:

          Zeile\r\n\r\nZeile

          Die Umwandlung selber funzt also, aber nicht die formatgerechte Ausgabe im Editor...

          1. Hi,

            $text = str_replace('[br]', '\r\n', $text);

            auslese funkioniert das auch nicht, denn es wird so im Editor-Fenster ausgegeben:

            Zeile\r\n\r\nZeile

            Natürlich.

            Beachte den Unterschied zwischen '' und "" in PHP.

            Die Umwandlung selber funzt also,

            Nur, wenn Du das falsche Umsetzen als "funzt" bezeichnest.

            aber nicht die formatgerechte Ausgabe im Editor...

            Nein. Der kann nichts dafür - der Fehler ist bereits im str_replace geschehen.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
            1. Hi,

              $text = str_replace('[br]', '\r\n', $text);

              auslese funkioniert das auch nicht, denn es wird so im Editor-Fenster ausgegeben:

              Zeile\r\n\r\nZeile

              Natürlich.

              Beachte den Unterschied zwischen '' und "" in PHP.

              Die Umwandlung selber funzt also,

              Nur, wenn Du das falsche Umsetzen als "funzt" bezeichnest.

              aber nicht die formatgerechte Ausgabe im Editor...

              Nein. Der kann nichts dafür - der Fehler ist bereits im str_replace geschehen.

              cu,
              Andreas

              Ich weiß dass "" den "Wert" einer Variable ausgeben, während '' nur den Namen der Variable - nur funzt es in "" auch nicht, ich bekomme weiterhin
              Zeile\r\n\r\nZeile angezeigt...

      2. مرحبا

        Wenn jetzt Änderungen vorgenommen wurden möchte ich aber, dass der Zeilenumbruch mit [br] in die DB geschrieben wird...

        Genau das solltest du verhindern. Mit dieser herangehensweise zerstörst du die Rohdaten, nicht gut.

        Ich verstehe auch nicht wirklich dein Problem, bei mir funktioniert z. B. das folgende ohne Probleme.

        <?php  
          
        $str = "Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.";  
        $nlbr = nl2br($str);  
          
        print <<<EOT
        
        <!DOCTYPE html>  
        <html><head><meta charset="utf-8"><title>\\r\\n</title></head><body>  
          
        <p>[code lang=php]$str
        ~~~</p>  
        <textarea rows="5" cols="70">`$str`{:.language-php}</textarea>  
        <pre>`$str`{:.language-php}</pre>  
        <p>$nlbr</p>  
          
        </body></html>[/code]  
        `EOT;`{:.language-php}  
          
        mfg
        
        -- 
        [Never look back ...](http://www.youtube.com/watch?v=KHUSENUtn7k)
        
        1. مرحبا

          Wenn jetzt Änderungen vorgenommen wurden möchte ich aber, dass der Zeilenumbruch mit [br] in die DB geschrieben wird...

          Genau das solltest du verhindern. Mit dieser herangehensweise zerstörst du die Rohdaten, nicht gut.

          Ich verstehe auch nicht wirklich dein Problem, bei mir funktioniert z. B. das folgende ohne Probleme.

          <?php

          $str = "Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.";
          $nlbr = nl2br($str);

          print <<<EOT

          
          > ~~~html
          
          <!DOCTYPE html>  
          
          > <html><head><meta charset="utf-8"><title>\\r\\n</title></head><body>  
          >   
          > <p>[code lang=php]$str
          
          ~~~</p>  
          
          > <textarea rows="5" cols="70">`$str`{:.language-php}</textarea>  
          > <pre>`$str`{:.language-php}</pre>  
          > <p>$nlbr</p>  
          >   
          > </body></html>[/code]  
          > `EOT;`{:.language-php}  
          >   
          > mfg  
            
          Das funzt bei mir auch...  
          Ich bekomms einfach nicht hin, dass er mir ein bestimmtes Zeichen in ein \r\n tauscht.  
            
          nl2br funzt bei mir beim normalen Textfenster auch (wenn ich nichts umwandel) - nur beim TinyMCE funzt das nicht...muss da dann noch mal nachschauen... 
          
          1. ok, nachtrag...das ganze scheint am strip_tags zu hapern...das habe ich nach der Umwandlung reingemacht, um alle html-tags rauszuhauen. Wenn ich das lösche, wird auch ein <br /> vom TinyMCE selber in die DB geschrieben...

            Wenn ich es jetzt so schreibe:

              
            $text = str_replace("<br />", "[br]", $text);  
              
            $text = strip_tags($text);  
            $text = str_replace("[br]", "<br />", $text);  
            
            

            dann funzt es. Ist zwar keine saubere Lösung, aber so hoffe ich es zu schaffen, dass nicht erlaubte Tags rausgefiltert werden...sprich: Zuerst wird alles, was erlaubt ist in BBCOde gewandelt, der Rest fliegt raus, außer der Zeilenumbruch, welcher danach wieder in html-tag gesetzt wird...

            Auch das funzt dann:

              
            $text = str_replace("<br />", "[br]", $text);  
              
            $text = strip_tags($text);  
            $text = str_replace("[br]", "\r\n", $text);  
            
            

            das ganze wird dann im Editor per nl2br ausgegeben.

            Das ganze hat jetzt nur wieder einen Haken (wäre ja auch zu schön gewesen wenn ich jetzt mal ins Bett könnte...)

            Wenn ich nl2br zur Ausgabe benutze, wird mir bei jedem Abspeichern der Änderung in die DB ein weiterer Absatz hinzugefügt, obwohl keiner angegeben ist...anscheinend setzt TinyMCE jedes <br /> wieder in einen Absatz, also <p><br /></p>....aaaaargh......

            1. مرحبا

              ok, nachtrag...das ganze scheint am strip_tags zu hapern...das habe ich nach der Umwandlung reingemacht, um alle html-tags rauszuhauen. Wenn ich das lösche, wird auch ein <br /> vom TinyMCE selber in die DB geschrieben...

              Wie kommen diese HTML-Tags in die Datenbank?
              Userkommentare kommen für gewöhnlich als reiner Text mit Zeilenumbrüchen bei dir an, wann genau kommt das HTML-Zeugs in deine Kommentare?

              mfg

              1. مرحبا

                ok, nachtrag...das ganze scheint am strip_tags zu hapern...das habe ich nach der Umwandlung reingemacht, um alle html-tags rauszuhauen. Wenn ich das lösche, wird auch ein <br /> vom TinyMCE selber in die DB geschrieben...

                Wie kommen diese HTML-Tags in die Datenbank?
                Userkommentare kommen für gewöhnlich als reiner Text mit Zeilenumbrüchen bei dir an, wann genau kommt das HTML-Zeugs in deine Kommentare?

                mfg

                Es handelt sich hier um das Backend für eine Webseite, bei der User selber den Inhalt der Seiten pflegen kann. SOmit sollten auch Gestalltungselemente wie Absatz, Fettschrift, Schrägschrift und Unterstriche möglich sein. Diese werden über den TinyMCE eingefügt und dieser gibt den Code mit aus. Dieser wird dann in BBCOde gewandelt und in die DB geschrieben...

                Wie gesagt, das klappt alles recht gut, nur der normale Zeilenumbruch macht Ärger. Und wenn ich nl2br verwende, bekomme ich Probleme mit den Absätzen, da nach jedem Ändern neue hinzugefügt werden...

                Ich poste hier noch mal den ganzen Code, vielleicht sieht man es dann besser:

                Funktion html-->bbCode

                  
                <?php  
                  
                function html_bbcode($text)  
                {  
                    $text = str_replace("<br />", "\r\n", $text);  
                    $text = str_replace("<p>&nbsp;</p>", "", $text);  
                    $text = preg_replace('#\<strong\>(.*)\</strong\>#isU', "[b]$1[/b]", $text);  
                    $text = preg_replace('#\<em\>(.*)\</em\>#isU', "[i]$1[/i]", $text);  
                    $text = preg_replace('#\<p\>(.*)\</p\>#isU', "[p]$1[/p]", $text);  
                    $text = preg_replace('#\<span style="text-decoration: underline;"\>(.*)\</span\>#isU', "[u]$1[/u]", $text);  
                    $text = preg_replace('#\<span style="text-decoration: underline; color: \#ffff00;">(.*)\</span\>#isU', "[u_gelb]$1[/u]", $text);  
                  
                	$text = strip_tags($text);  
                  
                    //Rückgabe  
                    return $text;  
                }  
                  
                ?>  
                
                

                und wieder zurück

                  
                <?php  
                  
                    function bbcode_html($text)  
                    {  
                        $text = htmlentities($text, ENT_QUOTES, "UTF-8");  
                  
                        # Formatierungen  
                  
                        $text = str_replace('[br]', "<br />", $text);  
                        $text = preg_replace('#\[b\](.*)\[/b\]#isU', "<strong>$1</strong>", $text);  
                        $text = preg_replace('#\[p\](.*)\[/p\]#isU', "$1", $text);  
                        $text = preg_replace('#\[i\](.*)\[/i\]#isU', "<em>$1</em>", $text);  
                        $text = preg_replace('#\[u_gelb\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline; color: #ffff00;\">$1</span>", $text);  
                  
                        $text = preg_replace('#\[color=(.*)\](.*)\[/color\]#isU', "<span style=\"color: $1\">$2</span>", $text);  
                        $text = preg_replace('#\[u\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline;\">$1</span>", $text);  
                  
                        # Links  
                        $text = preg_replace('#\[url\](.*)\[/url\]#isU', "<a href=\"$1\">$1</a>", $text);  
                        $text = preg_replace('#\[ url=(.*)\](.*)\[/url\]#isU', "<a href=\"$1\">$2</a>", $text);  
                  
                        # Zitate  
                        $text = preg_replace('#\[quote\](.*)\[/quote\]#isU', "<div class=\"zitat\">$1</div>", $text);  
                  
                        return($text);  
                    }  
                  
                ?>  
                
                

                Und hier wird das ganze im Backend ausgegeben:

                  
                 <?php  
                  
                    //Funktionsaufruf html ==> bbcode  
                    $text = bbcode_html($datensatz["text"]);  
                  
                    // ID speichern  
                    $ueber_mich_id_ori = $datensatz["id"];  
                  
                     echo '<textarea name="ueber_mich_text_de" class="admin_gross">';  
                  
                        echo nl2br($text_de);  
                  
                     echo '</textarea>';  
                  
                ?>  
                
                

                Hier wird das ganze dann in die DB geschrieben:

                  
                //Funktionsaufruf html ==> bbcode  
                $ueber_mich_ueberschrift_de = html_bbcode($_POST["ueber_mich_ueberschrift_de"]);  
                $ueber_mich_ueberschrift_pl = html_bbcode($_POST["ueber_mich_ueberschrift_pl"]);  
                $ueber_mich_text_de = html_bbcode($_POST["ueber_mich_text_de"]);  
                $ueber_mich_text_pl = html_bbcode($_POST["ueber_mich_text_pl"]);  
                  
                mysql_query("SET NAMES 'utf8'");  
                  
                $mysql_aendern = "UPDATE  
                                    ueber_mich_text  
                                  SET  
                                    ueber_mich_ueberschrift_de = '" . mysql_real_escape_string($ueber_mich_ueberschrift_de) . "',  
                                    ueber_mich_ueberschrift_pl = '" . mysql_real_escape_string($ueber_mich_ueberschrift_pl) . "',  
                                    ueber_mich_text_de = '" . mysql_real_escape_string($ueber_mich_text_de) . "',  
                                    ueber_mich_text_pl = '" . mysql_real_escape_string($ueber_mich_text_pl) . "'  
                                  WHERE  
                                    ueber_mich_id = '" . intval($_POST["ueber_mich_id_ori"]) . "'";  
                  
                $ergebnis = mysql_query($mysql_aendern);  
                  
                $num = mysql_affected_rows();  
                
                

                Was mir gestern aufgefallen ist: Wenn ich <br /> in der html-bbcode-Funktion in [br] umwandel und dann alle html-Tags via strip_tags rausschmeisse, [br] dann wieder in <br /> wandel und es in die DB schreibe, dann funzt es auch im textarea-Feld. Wenn ich aber [br] erst in der Funktion umwandel, welche den BBCode wieder in HTML wandelt (also wenn das ganze aus der DB gelesen wird), dann funzt das nicht mehr...

                Ich hoffe ihr habt jetzt alle infos die ihr braucht...

                besten dank schon mal bis hier hin...

                Ragna

        2. Hello lieber Malcolm,

          Ich verstehe auch nicht wirklich dein Problem, bei mir funktioniert z. B. das folgende ohne Probleme.

          Das ist aber falsch. Da fehlt beide Male die kontextgemäße Behandlung. Innerhalb der Textarea ist das besonders schlimm. Bitte nachbessern :-)

          <?php

          $str = "Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.";
          $nlbr = nl2br($str);

          print <<<EOT

          
          > ~~~html
          
          <!DOCTYPE html>  
          
          > <html><head><meta charset="utf-8"><title>\\r\\n</title></head><body>  
          >   
            
          hier:  
          
          > <p>[code lang=php]$str
          
          ~~~</p>  
          
          > <textarea rows="5" cols="70">`$str`{:.language-php}</textarea>  
          > <pre>`$str`{:.language-php}</pre>  
            
          und hier:  
          
          > <p>$nlbr</p>  
          >   
          > </body></html>[/code]  
          > `EOT;`{:.language-php}  
            
          Beide Ausgabevariablen könnten HTML-eigene Zeichen enthalten.  
            
            
            
            
          Liebe Grüße aus dem schönen Oberharz  
            
            
          Tom vom Berg  
          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
            
          
          -- 
           ☻\_  
          /▌  
          / \ Nur selber lernen macht schlau  
          <http://bergpost.annerschbarrich.de>
          
          1. مرحبا

            Ich verstehe auch nicht wirklich dein Problem, bei mir funktioniert z. B. das folgende ohne Probleme.
            Das ist aber falsch.

            :(

            Da fehlt beide Male die kontextgemäße Behandlung.

            Weil's reiner Text war, hatte ich wegen der übersichtlichkeit darauf verzichtet. Mein Fehler.
            Hier der nachgebesserte Code (einfach die Zeile ersetzen).

            <?php  
              
            $str = htmlspecialchars("Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.");
            

            mfg

            1. Hello E.,

              Ich verstehe auch nicht wirklich dein Problem, bei mir funktioniert z. B. das folgende ohne Probleme.
              Das ist aber falsch.

              Da fehlt beide Male die kontextgemäße Behandlung.

              Weil's reiner Text war, hatte ich wegen der übersichtlichkeit darauf verzichtet. Mein Fehler.
              Hier der nachgebesserte Code (einfach die Zeile ersetzen).

              <?php

              $str = htmlspecialchars("Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.");

                
              Das wäre aber die falsche Stelle. Einen statischen String zu behandeln ist zwar ganz dienstbeflissen, aber nicht der richtige Zeitpunkt für diese Aktion. Man weiß ja nicht, was andere Programmteile dann anschließend noch mit $str anstellen.  
                
              Die kontextgerechte Behandlung sollte daher immer dann passieren, wenn man sich sicher sein kann, dass keine andere Operation mit der Variable mehr zwischen die Behandlung und die Ausgabe in den Kontext passt. Wie man diese Sicherheit herstellt, ist dabei unerheblich.  
                
              Darauf kam es mir hier an.  
                
              Bei so einem kleinen Beispiel wird vermutlich fast jeder gleich sagen: "Wieso? Sieht man doch!". Aber Du weißt ja selber, wie schnell kleine Beispiele größer und damit auch unübersichtlich werden.  
                
                
                
                
                
                
              Liebe Grüße aus dem schönen Oberharz  
                
                
              Tom vom Berg  
              ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                
              
              -- 
               ☻\_  
              /▌  
              / \ Nur selber lernen macht schlau  
              <http://bergpost.annerschbarrich.de>
              
              1. مرحبا

                $str = htmlspecialchars("Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.");[/code]

                Das wäre aber die falsche Stelle.

                Nicht in meinem Beispiel.

                Einen statischen String zu behandeln ist zwar ganz dienstbeflissen, aber nicht der richtige Zeitpunkt für diese Aktion. Man weiß ja nicht, was andere Programmteile dann anschließend noch mit $str anstellen.

                In meinem Bsp. ist doch ziemlich Offensichtlich, dass da nichts mehr mit dem String passiert :)

                Die kontextgerechte Behandlung sollte daher immer dann passieren, wenn man sich sicher sein kann, dass keine andere Operation mit der Variable mehr zwischen die Behandlung und die Ausgabe in den Kontext passt.

                Genau deswegen hatte ich in meinem ersten Beispiel darauf verzichtet.

                mfg

                1. Hello E.,

                  Nicht in meinem Beispiel.
                  Genau deswegen hatte ich in meinem ersten Beispiel darauf verzichtet.

                  Ich will Dich ja auch nur ein ganz kleines Bisschen ärgern. :-)

                  Aber das Beispiel schreit gerade danach, die Lehren von
                  http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel
                  mal konsequent anzuwenden. Denn nur in einfachen Beispielen aus der Praxis werden sie verständlich.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
              2. مرحبا

                Die kontextgerechte Behandlung sollte daher immer dann passieren, wenn man sich sicher sein kann, dass keine andere Operation mit der Variable mehr zwischen die Behandlung und die Ausgabe in den Kontext passt. Wie man diese Sicherheit herstellt, ist dabei unerheblich.

                Nächster Versuch (so in etwa würde ich es lösen):

                <?php  
                  
                $str = "Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.";  
                  
                printf ('<!DOCTYPE html><html><head><meta charset="utf-8"><title>\\r\\n</title></head><body>  
                  
                <p>%1$s</p>  
                <textarea rows="5" cols="70">%1$s</textarea>  
                <pre>%1$s</pre>  
                <p>%2$s</p>  
                  
                </body></html>'  
                , htmlspecialchars($str)  
                , nl2br(htmlspecialchars($str))  
                );
                

                mfg

                1. Hello,

                  Nächster Versuch (so in etwa würde ich es lösen):

                  <?php

                  $str = "Lorem ipsum dolor sit ahmet.\r\nAt vero eos et accusam.\r\nLorem ipsum dolor sit ahmet.";

                  printf ('<!DOCTYPE html><html><head><meta charset="utf-8"><title>\r\n</title></head><body>

                  <p>%1$s</p>
                  <textarea rows="5" cols="70">%1$s</textarea>
                  <pre>%1$s</pre>
                  <p>%2$s</p>

                  </body></html>'
                  , htmlspecialchars($str)
                  , nl2br(htmlspecialchars($str))
                  );

                    
                    
                  Das sieht schon besser aus.  
                    
                  Das ist kutz vor 'echten' Templates nebst Template-Ersetzungsfunktion, die dann auch lesbar sind und Darstellung und Daten strikt voneinander trennen :-D  
                    
                    
                    
                    
                    
                  Liebe Grüße aus dem schönen Oberharz  
                    
                    
                  Tom vom Berg  
                  ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                    
                  
                  -- 
                   ☻\_  
                  /▌  
                  / \ Nur selber lernen macht schlau  
                  <http://bergpost.annerschbarrich.de>