leerzeile wird doppelt gemacht...: joshua

hallo!

ich lasse in einem formular für ein gästebuch die leerzeile (chr(13) bzw. chr(10)) durch ein einfaches '<br />' ersetzen. gebe ich jetzt im formluar folgenden beispiel text ein:

lorem ipsum [return]
dolor sit amet

erzeugt dieser folgende ausgabe

lorem ipsum

doppeltes <br />

dolor sit amet

es wird bei jeder returntaste, das '<br />' verdoppelt...

was habe ich da falsch gemacht?

gruss
joshua

  1. Hallo,

    was habe ich da falsch gemacht?

    das kann ich dir nicht sagen, wenn du den entsprechenden Code-Abschnitt nicht postest.

    Schöne Grüße
    Julian

    --
    "Real programmers can write assembly code in any language." - Larry Wall
  2. Ⓗⓐⓛⓛⓞ joshua!

    (du hast Thema und Name vertauscht!)

    ich lasse in einem formular für ein gästebuch die leerzeile (chr(13)
    bzw. chr(10)) durch ein einfaches '<br />' ersetzen.

    Und wie? Wenn du uns ein relevantes Code-Schnipsel verrätst, können wir
    sicherlich schnell eine Lösung finden.

    ℆, ℒacℎgas

    --
    Keine Verbesserung ist zu klein oder geringfügig, als dass man
    sie nicht durchführen sollte. (Adorno)
  3. Hi joshua

    ich denke du musst das eingegebene Return im Textfeld erst wieder herausnehmen bevor du ttttt<br>aaaa generierst. sonst dürftest du ttttt/n/r<br>aaaa haben

    ralphi

  4. Hallo joshua,

    ich lasse in einem formular für ein gästebuch die leerzeile (chr(13) bzw. chr(10)) durch ein einfaches '<br />' ersetzen.

    Vermutlich manuell. Verwende dafür nl2br. Ersetze die Zeichen auch nur bei der Ausgabe, nicht schon beim Speichern.
    Vermutlich lagen da die Gründe deiner Probleme, andernfalls musst du wie gesagt mehr verraten.

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
  5. Hello,

    ich lasse in einem formular für ein gästebuch die leerzeile (chr(13) bzw. chr(10)) durch ein einfaches '<br />' ersetzen. gebe ich jetzt im formluar folgenden beispiel text ein:

    lorem ipsum [return]
    dolor sit amet

    erzeugt dieser folgende ausgabe

    lorem ipsum

    doppeltes <br />

    dolor sit amet

    es wird bei jeder returntaste, das '<br />' verdoppelt...

    Die Browser sollten einen Returntastendruck _einheitlich_ durch ein "\r\n"
    bzw eigentlich durch ein 0D 0A (hex) ersetzen, und zwar unabhängig davon, ob sie auf einem MAC OS, einem WinDOS, oder einem *X-System laufen. Wie sie das intern regeln, ist ihnen überlassen, aber für in den übertragenen Daten muss es so aussehen.

    Wenn DU nun z.B. mal einen Text, der entweder nur 0D oder nur 0A Zeichen verwendet, in eine Textarea per Vorbelegung schreibst, dann werden diese Zeichen im Browser automatisch wieder zu einem vollständigen 0D 0A Paar ergänzt.

    Wenn der Text nun mit dem Request an das Script übertragen wird, musst Du im Script also

    1. erst alle 0D 0A tauschen,
    2. dann nachschauen, ob noch einzelne 0D vorhanden sind und die tauschen
    3. und dann noch nach einzelnen 0A suchen und die auch noch tauschen.

    2. und 3. darf eigentlich nicht vorkommen, aber nicht alle Browser halten sich an die Betriebssystem-Unabhängigkeits-Vorschrift.

    In Hochsprachen werden die Synonyme "\r" und "\n" häufig nochmals gegen das auf dem jeweiligen OS gültige Zeilenendezeichen getauscht. So wird vom Compiler einer Hochsprache X das "\n" auf einem MAC z.B. durch ein 0Dh ersetzt, auf einem *X aber durch 0Ah.

    Da man sich darauf aber nicht verlassen kann, benutzt man für die Ersetzungsregel nicht die Synonyme, sondern den numerischen Code. In PHP wird diese Ersetzung allerdings nicht OS-Abhängig vorgenommen, sondern ein "\n" immer durch 0Ah und ein "\r" immer durch 0Dh ersetzt.

    Nimm aber trotzdem die numerischen Codes ;-))

    str_replace(array(chr(13).chr(10),chr(13),chr(10)),"<br />",$text);

    müsste Deinen Ansprüchen gerecht werden.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hi Tom!

      str_replace(array(chr(13).chr(10),chr(13),chr(10)),"<br />",$text);

      müsste Deinen Ansprüchen gerecht werden.

      nl2br() kümmert sich automatisch um die Problematik:
      http://cvs.php.net/co.php/php-src/ext/standard/string.c?r=1.420.2.6#3706

      Grüße
      Andreas

      --
      SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
      1. Hallo Andreas,

        nl2br() kümmert sich automatisch um die Problematik:

        Nicht ganz, würde ich sagen.
        Denn nl2br() _ersetzt_ die CR/LF nicht, sondern _ergänzt_ sie nur um <br /> Tags.
        Das wird ja auch im PHP-Manual so beschrieben, auf das du selbst verlinkt hast.

        So long,

        Martin

      2. Hello,

        str_replace(array(chr(13).chr(10),chr(13),chr(10)),"<br />",$text);

        müsste Deinen Ansprüchen gerecht werden.

        nl2br() kümmert sich automatisch um die Problematik:
        http://cvs.php.net/co.php/php-src/ext/standard/string.c?r=1.420.2.6#3706

        Aber nl2br() ersetzt die Zeilenschaltungszeichen nicht, sondern ergänzt sie.
        Wenn man sie denn ersetzen will, weil der Eintrag z.B. anschließend als eine Zeile (Datensatz) in ein Flat-File soll, hilt nl2br() nicht.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi!

          Aber nl2br() ersetzt die Zeilenschaltungszeichen nicht, sondern ergänzt sie.

          stimmt.

          Wenn man sie denn ersetzen will, weil der Eintrag z.B. anschließend als eine Zeile (Datensatz) in ein Flat-File soll, hilt nl2br() nicht.

          Ich persönlich würde keine HTML-Tags beim Speichern der Daten verwenden, sondern bei der Ausgabe.

          Grüße
          Andreas

          --
          SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
          1. Hello,

            Wenn man sie denn ersetzen will, weil der Eintrag z.B. anschließend als eine Zeile (Datensatz) in ein Flat-File soll, hilt nl2br() nicht.
            Ich persönlich würde keine HTML-Tags beim Speichern der Daten verwenden, sondern bei der Ausgabe.

            Ich auch.
            Aber hier handelt es ich sicherlich erstmal um ein Beispiel - oder?
            Durch welches Zeichen/Zeichensequenz man also die Newlines ersetzt, damit sie für die Datei nicht schädlich werden können, kann man sich dann noch überlegen.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau