Tom: Zeilenwechsel aus einem Textfeld herausfiltern

Moin!

Ich will aus einer textarea etwaige eingegebene Zeilenwechsel herausfiltern und durch <br> ersetzen.

Mit folgendem Code wird zwar pro Zeilenwechsel in der Textarea (\n) ein "<br>" eingefügt, aber die \n's bleiben trotzdem. Wie gehts richtig??

if ($input =~ /\n/)
   {
     until (!($input =~ /\n/))
      {
      $input =~ s/\n/<br>/;
      }
   }

Danke!

Tom.

  1. Hallo,

    das [link]http://selfaktuell.teamone.de/artikel/cgiperl/zeilenumbruch/index.htm[/link] sollte Dir helfen.

    Cu Helmut

    1. Hallo tom, *gg*

      ich kann uwar immer noch kein Perl, aber lesen konnte ich in dem Link schon, dass nur nach \n gesucht wurde.

      Du solltest aber sicherstellen, dass weder chr(13) noch chr(10) drinstehen. Da je heutzutage oft ziemlich unreflektiert von Windosen auf Unixe hochgeladen wird (die Software aus dem Netz machts ja mit einem Klick), landen immer wieder #13#10 terminierte Zeilen auf dem System. PHP nimmt das z.B. bei Verwendungder Heredoc-Syntax extrem übel. Außerdem solltest Du Programme fürs Internet so schreiben, dass sie auf den drei Plattformen Unix, Windose und MAC laufen. Da aber alle drei unter \n etwas anderes verstehen, sollte man hier eine Ebene tiefer angreifen und folgendes tun:

      1. Definition der gesuchten Sequenz
      $10 = chr(10);
      $13 = chr(13);
      $1310= chr(13).chr(10);     oder so ähnlich.

      2. Ersetzen der Windosen-Linebreaks
      tausche alle $1310 gegen "<br>"

      3. Ersezten aller MAC-Linebreaks, falls noch vorhanden
      tausche alle $13 gegen "<br>"

      4. Ersetzen aller Unix-Linebreaks, falls noch vorhanden
      tausche alle $10 gegen "<br>"

      So sit sichergestellt, dass auf allen OS alle Dateien, egal von welchem OS (der drei) sie gekommen sind, zufriedenstellend behandelt werden.

      Grüße

      Tom

      1. Tatsache, es geht mit

        $input =~ s/\015\012|\015|\012|\n/<br>/g;

        Schönen Dank! Ihr habt mich vor einem Nervenzusammenbruch bewahrt!