Andreas Vogt: Zeilenschaltung im Textarea

Hallo,
habe folgenden Testtext:
<br />Test<br /><br />[img]Bild075.jpg[/img]<br /><br />Test

Jetzt möchte ich die Zeilenumbrüche ersetzen nach \n:
$description = str_replace("<br />", "\n", $description);

Leider wird immer die erste Zeile "verschluckt", was mache ich falsch?

Gruß Andreas

  1. Leider wird immer die erste Zeile "verschluckt", was mache ich falsch?

    Du beschreibst die Auswirkung deines Fehlers nicht exakt genug, sodass man dir helfen könnte.

    Jedenfalls ist für mich hier kein Fehler erkennbar - außer vielleicht die Auszeichnung des Textes, also dass du anstatt Absätzen lieber <br />-Wüsten verwendest.

    1. Hallo suit,

      Jedenfalls ist für mich hier kein Fehler erkennbar - außer vielleicht die Auszeichnung des Textes, also dass du anstatt Absätzen lieber <br />-Wüsten verwendest.

      ich vermute folgendes:

      Zeilenumbruch in Textarea => nl2br() => <br /> [*]
      Bei der Anzeige in der Textarea zum Bearbeiten möchte Andreas nun den umgekehrten Weg gehen.

      Freundliche Grüße

      Vinzenz

      [*] hoffentlich ist's auch XHTML

      1. Zeilenumbruch in Textarea => nl2br() => <br /> [*]
        Bei der Anzeige in der Textarea zum Bearbeiten möchte Andreas nun den umgekehrten Weg gehen.

        Ja, aber wie bereits erwähnt sehe ich nichts, was an der Zeichenkettenersetzungsfunkion falsch wäre - es ist nicht genau beschrieben, was "nicht funzt" bzw. was "verschlucken" heisst.

        1. Hallo,
          also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.

          Ich habe das jetzt ein wenig unkonventionell gelöst indem ich vor dem Anzeigen im Textarea generell ein \n einfüge, und beim Anzeigen im Template wird es wieder entfernt.

          Andreas

          1. Hallo Andreas,

            also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.

            häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.

            Freundliche Grüße

            Vinzenz

            1. Hello,

              also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.

              häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.

              Wie ist es denn bei MySQL und einem Varchar-Feld mit den führenden und anhängenden Leerzeichen?
              Vielleicht sollte ein anderer Spaltentyp gewählt werden?

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo Tom,

                » häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.

                Wie ist es denn bei MySQL und einem Varchar-Feld mit den führenden und anhängenden Leerzeichen?

                führende Leerzeichen werden *nie* abgeschnitten, anhängende Leerzeichen wurden bei Versionen älter als MySQL 5.0.3 abgeschnitten, seither werden anhängende Leerzeichen nur dann abgeschnitten, wenn sie die definierte Feldlänge überschreiten. Dabei wird eine Warnung erzeugt. Steht im Handbuch.

                Vielleicht sollte ein anderer Spaltentyp gewählt werden?

                Nein. Statt kaputtes Verhalten alter MySQL-Versionen durch Wahl eines falschen Spaltentyps zu "beheben", sollte man eine akzeptable Version von MySQL einsetzen. MySQL 5.0.3 war eine Alpha-Version der 5.0-Serie. Unter einer Produktionsversion der 5.0-Reihe sollte es heute im Realeinsatz nicht sein. MySQL 4.1 ist tot (ältere Versionen sind verwest ...).

                Freundliche Grüße

                Vinzenz

                1. Hallo,
                  PHP-Version ist 5.1.2

                  Gruß Andreas

                  1. Hi,

                    PHP-Version ist 5.1.2

                    Schön.
                    Und was ist mit Vinzenz' Hinweis auf trim?

                    MfG ChrisB

                    --
                    Light travels faster than sound - that's why most people appear bright until you hear them speak.
                    1. Hallo,
                      das ist ja das merkwürdige,
                      in der Tabelle steht es richtig drin, und im Script wird dieser Wert unverfälscht angezeigt. Die Funktion storeCaret() rührt vom BBC Editor her.

                      $description = $row['body'];

                      $body = '<textarea style="border: 0px" name="ta" id="ta" rows="12" cols="80" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" tabindex="2">'.$description.'</textarea>';

                      $mklib->buildpage($body);

                      Funktion buildpage:
                      $output .= $Skin->view_body($body);

                      Template:
                      function view_body($content) {
                      return <<<EOF

                      {$content}<br />  
                      

                      EOF;
                      }

                      1. Hi,

                        in der Tabelle steht es richtig drin, und im Script wird dieser Wert unverfälscht angezeigt. Die Funktion storeCaret() rührt vom BBC Editor her.

                        $description = $row['body'];

                        Kontrollausgaben machen, mittels var_dump bitte, Ergebnis aus der Quelltextanzeige kopieren - vor und nach dem Ersetzen der BR.

                        MfG ChrisB

                        --
                        Light travels faster than sound - that's why most people appear bright until you hear them speak.
                  2. Hallo Andreas,

                    PHP-Version ist 5.1.2

                    Toms Idee war die, dass Du die Daten in einem MySQL-Datenbank abspeicherst und MySQL diese Daten verfälscht. Dies kann aber ausgeschlossen werden, weil Du Daten am *Anfang* Deiner Zeichenkette verlierst und MySQL den Bereich in Ruhe lässt.

                    PHP entfernt nicht von selbst Teile einer Zeichenkette, das müsste schon Dein eigener Code sein, der dies vornimmt - beziehungsweise der Code, den Du einsetzt.

                    Freundliche Grüße

                    Vinzenz