Aquariophile: -> (REGEXP) s/\n/<br>/g; geht nicht!

Hallo

$text ist das was aus einer <textarea> übermittelt wird,
und enthält Zeilenumrbüche.

$text=~s/\n/<br>/g;

greift irgendwie voll nicht.

Ganz duster erinnere ich mich daran,
dass mir mal irgendjemand eine REGEXP zeigte,
wo mit irgendwo seiner komischen konstruktion von 10 12 10 12
das \n durch <br> ersetzt wurde,
weil aber leider nicht mehr genau wie das ausschaute.

Bitte um Hilfe!

Danke!
Aquariophile

PS.: Neeeeeeeeeeeeeeee, das ist _kein_ Aprilscherz!

  1. Hallo,

    $text=~s/\n/<br>/g;

    ist an und für sich richtig. Der Fehler liegt sicher wo anders, aber ohne Quelltext ist das auch schwer herauszufinden.

    1. Hi !

      Also ich meine, dass das eigentlich klappen müsste.
      Aber ich habe noch eine kompliziertere Variante,
      die auch klappen muss:

      my $tmp_test="";
      foreach ($test)
      {
           chomp ($_);
           $tmp_test = $tmp_test + $_ + "<br>";
      }
      $test = $tmp_test;

      1. Moin!

        my $tmp_test="";
        foreach ($test)
        {
             chomp ($_);
             $tmp_test = $tmp_test + $_ + "<br>";
        }
        $test = $tmp_test;

        Aeh... wie bitte? Kannst Du Perl ueberhaupt? Weisst Du, was das da macht? Wie auch immer, mit diesem Problem hat das ja nun rein gar nichts zu tun.

        So long

        --
        Perhaps the designers of CSS1 thought that the "visualists" should be given toys to play with so that they will stop playing with adults' tools (HTML).
            -- http://www.cs.tut.fi/~jkorpela/styles/harmful.html

        1. Moin!

          my $tmp_test="";
          foreach ($test)
          {
               chomp ($_);
               $tmp_test = $tmp_test + $_ + "<br>";
          }
          $test = $tmp_test;

          Hier die Erklärung:
          Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
          Variable $test nach Wagenrücklauf und ersetzt ihn in ein
          HTML-Zeilenumbruch (<br>).

          foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.
          $tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
          wegen chomp ($_) angehängt wird und zusätzlich ein <br>.
          Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
          ein <br>.

          MS

          1. Hoi,

            my $tmp_test="";
            foreach ($test)
            {
                 chomp ($_);
                 $tmp_test = $tmp_test + $_ + "<br>";
            }
            $test = $tmp_test;

            Hier die Erklärung:

            Phantasie hast du ja ;-)

            Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
            Variable $test nach Wagenrücklauf und ersetzt ihn in ein
            HTML-Zeilenumbruch (<br>).

            Nein. Nicht zwingend. Das kommt darauf an, wie die Zeilenumbrueche kodiert
            sind.

            foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.
            $tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
            wegen chomp ($_) angehängt wird und zusätzlich ein <br>.
            Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
            ein <br>.

            Nein. '$test' ist kein Array, sondern ein Skalar. Was du moechtest, koennte
            man vielleicht etwa so erreichen:

            foreach(split /\n/,$text) {
              $txt .= "$_<br>";
            }

            Was aber absolut unnoetig ist, weil ein s///sg reicht.

            Gruesse aus dem schoenen LH,
             c.j.k

          2. Re!

            Im Chat wurde ich darauf hingewiesen, dass das vielleicht auch nur eine Aprilverarschung ist, aber nach Deiner neuerlichen Antwort scheint mir dass dann doch nicht der Fall zu sein. Ich wuerde Dir auf jeden Fall empfehlen, mal einen Einfuehrungskurs in Perl zu machen.

            my $tmp_test="";
            foreach ($test)
            {
                 chomp ($_);
                 $tmp_test = $tmp_test + $_ + "<br>";
            }
            $test = $tmp_test;

            Das laesst sich uebrigens kuerzer schreiben:
              chomp($test);
              $tmp_test = ($test += '<br>');

            Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
            Variable $test nach Wagenrücklauf und ersetzt ihn in ein
            HTML-Zeilenumbruch (<br>).

            Zumindest die Zeilenumbrueche, die vom aktuellen System verwendet werden, aber nicht unbedingt die, die ueber's Internet gesendet werden. Gerade um letzteres ging es hier aber. Das wichtigste aber ist, wenn es Zeilenumbrueche ersetzt, dann *alle*.

            foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.

            Das ist kompletter Quatsch. foreach setzt $_ (oder eine andere Variable, die Du angibst) nacheinander als Alias fuer jedes Element einer Liste. Mit irgendwelchen Zeilen hat das nichts zu tun; Kopien werden auch keine angelegt.

            $tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
            wegen chomp ($_) angehängt wird und zusätzlich ein <br>.

            chomp verhindert nicht, dass eine Variable Zeilenumbrueche enthalten kann, es sei denn, diese stehen zufaellig immer am Ende (was aber vor allem in diesem Beispiel (Textarea) ueberhaupt nicht gegeben ist).

            Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
            ein <br>.

            Definitiv nicht.

            So long

            1. Hoi,

              Ich wuerde Dir auf jeden Fall empfehlen, mal einen
              Einfuehrungskurs in Perl zu machen.

              Dito.

              my $tmp_test="";
              foreach ($test)
              {
                   chomp ($_);
                   $tmp_test = $tmp_test + $_ + "<br>";
              }
              $test = $tmp_test;

              Das laesst sich uebrigens kuerzer schreiben:
                chomp($test);
                $tmp_test = ($test += '<br>');

              Nein, das entspricht leider nicht dem, was MS geschrieben hat. Das
              folgende waere ungefaehr dasselbe:

              $tmp_test = $test + 0;

              ;-))

              Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
              Variable $test nach Wagenrücklauf und ersetzt ihn in ein
              HTML-Zeilenumbruch (<br>).

              Zumindest die Zeilenumbrueche, die vom aktuellen System verwendet
              werden, aber nicht unbedingt die, die ueber's Internet gesendet
              werden. Gerade um letzteres ging es hier aber. Das wichtigste aber
              ist, wenn es Zeilenumbrueche ersetzt, dann *alle*.

              Dazu auch
               http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm

              *scnr*

              Gruesse aus dem schoenen LH,
               c.j.k

              1. Moin Christian!

                Nein, das entspricht leider nicht dem, was MS geschrieben hat. Das
                folgende waere ungefaehr dasselbe:
                $tmp_test = $test + 0;

                Ich Idiot! Jetzt hab ich noch nicht mal diesen Anfaengerfehler gesehen! Naja, ich wuerde diesen Code sowieso nicht verwenden... ;-)

                So long

                --
                Alle Verallgemeinerungen sind falsch.

  2. Hoi,

    $text ist das was aus einer <textarea> übermittelt wird,
    und enthält Zeilenumrbüche.

    $text=~s/\n/<br>/g;

    greift irgendwie voll nicht.

    Kein Wunder. Denk' mal darueber nach, wofuer der Modifier 's' ist (s///s).
    perldoc perlre sollte helfen.

    Ganz duster erinnere ich mich daran,
    dass mir mal irgendjemand eine REGEXP zeigte,
    wo mit irgendwo seiner komischen konstruktion von 10 12 10 12
    das \n durch <br> ersetzt wurde,
    weil aber leider nicht mehr genau wie das ausschaute.

    Du meinst wohl

    $text =~ s/\015\012|\012|\015/<br />/sg;

    Der RegEx hat aber eine andere Intention: er soll Plattformuebergreifendes
    RegEx-Handling bieten. Siehe dazu auch

    http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm

    Gruesse aus dem schoenen LH,
     c.j.k