Markus: Nur einen Zeilenumbruch erlauben!

Hallo Leute,

Ich bin gerade dabei ein Gästebuch für meine HP zuschreiben.
Funktioniert auch soweit ganz gut. Nur hab' ich jetzt folgendes Problem:
Ich will im Nachrichtentextfeld nur einen Umsprung pro Zeile erlauben.
Meine Überlegung war jetzt, so lange eine Schleife durchlaufen zu lassen, bis keine Zeilenumsprünge mehr genau aufeinanderfolgen. Diese Schleife soll immer zwei aufeinanderfolgende Zeilensprung(\n\n) durch einen ersetzen (\n) usw. usw.
Wenn jemand von euch einen brauchbaren Rat hat, wäre ich sehr dankbar!

Markus

  1. Hi,

    LOL
    Du hast dir deine Frage doch schon selbst beantwortet.

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. Hi,

      LOL
      Du hast dir deine Frage doch schon selbst beantwortet.

      Ja Ich weiß, das Probmlem ist, dass es nicht funktioniert, wenn ich schreibe: $text=ereg_replace("\n\n", "\n", $text);

      Wenn ich einen einzelnen Zeilenumbruch durch irgendetwas ersetze zB.: $text=ereg_replace("\n", "Umbruch", $text);  das funktioniert, aber die obere Version nicht. Das heißt, zwischen den beiden aufeinanderfolgenden Umbrüchen muss noch irgendein Sonderzeichen o.ä. stehen. Leerzeichen und so hab' ich aber schon ausprobiert --> kein Erfolg

      1. Hi,

        Ja Ich weiß, das Probmlem ist, dass es nicht funktioniert, wenn ich schreibe: $text=ereg_replace("\n\n", "\n", $text);

        erhälst Du die Daten denn von einem Linux-System, bzw. von einem, welches "\n" als Umbruchzeichen definiert hat?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. erhälst Du die Daten denn von einem Linux-System, bzw. von einem, welches "\n" als Umbruchzeichen definiert hat?

          Nein, aber die Umbrüche werden ja erst per "\n" übergeben, dann kann man sie mit nl2br($variable) in Breaks ("<br>") umwandeln

          1. Hallo,

            schon mal damit versucht:
            str_replace("\n\n", "\n", $text);

            Ja gerade eben; funktioniert aber nicht!
            Es muss folglich irgendetwas zwischen den beiden Umbrüchen stehen!?

          2. Hi,

            Nein, aber die Umbrüche werden ja erst per "\n" übergeben, dann kann man sie mit nl2br($variable) in Breaks ("<br>") umwandeln

            Deine Schlussfolgerung hat nichts mit der Begründung zu tun. nl2br() wandelt Text-Umbrüche in HTML-Umbrüche um, nicht "\n"-Zeichen. Davon abgesehen hast Du ja selbst festgestellt, dass in Deinem Testfall der Umbruch aus mehr als einem Zeichen besteht, von denen eines "\n" ist.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. nl2br() wandelt Text-Umbrüche in HTML-Umbrüche um, nicht "\n"-Zeichen.

              Wie werden dann die Textumbrüche dargestellt?
              Und wieso kann ich dann einzelne Umbrüche ("\n") durch einen beliebigen Text ersetzen?!

              1. Hi,

                nl2br() wandelt Text-Umbrüche in HTML-Umbrüche um, nicht "\n"-Zeichen.
                Wie werden dann die Textumbrüche dargestellt?

                mit welchen Suchbegriffen bist Du nicht fündig geworden?

                Und wieso kann ich dann einzelne Umbrüche ("\n") durch einen beliebigen Text ersetzen?!

                Du hast gerade behautet, Du könntest durch die Wand gehen, weil Du es durch eine Tür geschafft hast.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
            2. Hello,

              Deine Schlussfolgerung hat nichts mit der Begründung zu tun. nl2br() wandelt Text-Umbrüche in HTML-Umbrüche um,

              No Sir!

              nl2br() _ergänzt_ (vermeintliche) Zeilenumbrüche mittels eines vorangestellten '<br />' oder ggf. auch noch '<br>'. Was als Zeilenumbruch akzeptiert wird, sollte eigentlich durch den einheitlichen Schalter
              http://de2.php.net/manual/de/ref.filesystem.php#ini.auto-detect-line-endings und seine Freunde geregelt sein. Das ist aber bisher weder durchgängig implementiert, geschweige denn dokumentiert.

              Bisher konnte ich in allen von mir verwendeten PHP-Versionen nur das Verhalten feststellen, dass auch die Browser zeigen sollten: verstümmelte CR LF werden ebenfalls ergänzt, hier aber nicht auf ein vollständiges CR LF, sondern nur auch ein   <br />CR   oder ein   <br />LF

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

              Tom

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

          erhälst

          Er halst. Nicht er hälst. Und schon gar nicht erhälst. ;-)

          Du die Daten denn von einem Linux-System,

          Wenn es sich um eine Übertragung eines HTML-Formulars handeln sollte, dürfte das eigentlich keine Rolle spielen.

          Für application/x-www-form-urlencoded heißt es:
          Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A').

          Für multipart/form-data (und alle anderen Mime-Types):
          As with all MIME transmissions, "CR LF" (i.e., `%0D%0A') is used to separate lines of data.

          Wenn also nur \n statt \r\n kommt, ist das ein Fehler im Absender …

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hi,

            Wenn also nur \n statt \r\n kommt, ist das ein Fehler im Absender …

            nö. Niemand zwingt ihn, eine Interpretation mit den Daten mitzuchicken.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Hello,

            Wenn es sich um eine Übertragung eines HTML-Formulars handeln sollte, dürfte das eigentlich keine Rolle spielen.

            Für application/x-www-form-urlencoded heißt es:
            Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A').

            Für multipart/form-data (und alle anderen Mime-Types):
            As with all MIME transmissions, "CR LF" (i.e., `%0D%0A') is used to separate lines of data.

            Wenn also nur \n statt \r\n kommt, ist das ein Fehler im Absender …

            Danke für die Klarstellung dieses Mythos.

            Leider halten sich nicht alle Browser an die regeln, aber das ist uns ohnehin klar gewesen. :-)

            Wesentlich ist aber, dass 0Dh 0Ah nicht gelichbedeutend mit "\r\n" ist, dazu hatte Chr. Kruse schon mal um sich gebissen. Man muss auch wissen, wie das Server-Programm (hier PHP) damit umgeht. Der sicherste Weg scheint mir daher, die tatsächliche Definition auch so nah wie möglich umzusetzen: Die RFCs für die "Senderprogramme" spricht von 'CR LF' und stellt das nochmals klar mit  %0D%0A

            Wenn also das "Senkenprogramm" nun %0D%0A auch wirklich durch "\r\n" repräsentiert, dann darf man "\r\n" benutzen. Es könnte aber sein, dass "\r\n" im Senkenprogramm eine betriebssystemabhängige Übersetzung betreibt, je nachdem, auf welcher Plattform kompiliert wird.

            Die einzige gemeinsame Größe bleibt somint also %0D%0A oder eben oktal ausgedrückt \015\012

            Schließlich findet das neue Babylon innerhalb der Kommunikationsmittel statt, mit deren Hilfe wir es eigentlich beseitigen wollten. Die wesentlichen Codes dieser Welt (Schriften) weren eigentlich schon auf ca. vier bis fünf einigermaßen ineinander konvertierbare reduziert, da wird es doch zeit, dass die Denker dieser Welt für neues Durcheinander sorgen.

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

            Tom

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

              Wesentlich ist aber, dass 0Dh 0Ah nicht gelichbedeutend mit "\r\n" ist, dazu hatte Chr. Kruse schon mal um sich gebissen.

              hier ein Kekschen für dich: systemübergreifende Zeilenumbrüche

              Grüße
              Roland

              1. Hello,

                Wesentlich ist aber, dass 0Dh 0Ah nicht gelichbedeutend mit "\r\n" ist, dazu hatte Chr. Kruse schon mal um sich gebissen.

                hier ein Kekschen für dich: systemübergreifende Zeilenumbrüche

                Das ist aber noch nichteinmal die halbe Miete. In einem anderen Dialog zu diesem Thema waren CK und ich da viiiiel tifer eingestigen, bis auf die Ebene Sprach-interpreter->Menmonic-Code->Compilier der Hochsprach des OS. Manchmal werden die Synonyme nämlich bis auf diese Ebene durchgeschleppt und erst dort ersetzt.

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

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
            2. Heißa, Tom,

              Wesentlich ist aber, dass 0Dh 0Ah nicht gelichbedeutend mit "\r\n" ist, dazu hatte Chr. Kruse schon mal um sich gebissen.

              Später wurde mir klargestellt, dass alle Zeilenumbrüche erst beim Schreiben in eine Datei durch den Zeilenumbruch des entsprechenden Betriebssystems ersetzt würden. Das bedeutete also, dass in der Stringbearbeitung \n immer LF ist, und erst beim Schreiben (und eben wieder beim Lesen) macht es einen Unterschied.

              Ich kann leider den entsprechenden Thread im Archiv nicht finden, aber ich glaube, es war CK, der mir die Antwort gegeben hat. Ich hoffe, ich habe das jetzt endlich richtig verstanden.

              Caramba!
              Grüße aus Biberach Riss,
              Candid Dauth (ehemals Dogfish)

              --
              „Erwecke niemals bei jemandem dem Eindruck, dass er etwas anders machen solle, weil er es anders macht als du, wenn er es besser macht als du.“ | Mein SelfCode
              http://cdauth.net.tc/
              1. Hello,

                Ich kann leider den entsprechenden Thread im Archiv nicht finden, aber ich glaube, es war CK, der mir die Antwort gegeben hat. Ich hoffe, ich habe das jetzt endlich richtig verstanden.

                Ich auch nicht. Vielleicht hat er ihn ja gelöscht (ist natürlich nicht erst gemeint) weil er sich so über mich geärgert hat. Ich wollte es nämlich genau wissen und er meinte es genau zu wissen, aber es war dann doch irgendwie anders ;-)) PHP behandelt "\r\n" wie 0Dh 0Ah, es übersetzt die Synonyme also nicht nochmals. Andere Programmiersprachen machen das aber ggf. anders.

                Jedenfalls solltest Du davon ausgehen, dass auch die Browser nicht alle richtig ticken, und schon mal verstümmelte Zeilenumbrüche senden.

                Am Bytestream, den Du mittels fwrite() in eine Datei schreibst, ändert PHP auch nichts mehr automatisch. Du musst schon selber dafür sorgen, dass Zeilenumbrüche ggf. richtiggestellt werden.

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

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Heißa, Tom,

                  Am Bytestream, den Du mittels fwrite() in eine Datei schreibst, ändert PHP auch nichts mehr automatisch. Du musst schon selber dafür sorgen, dass Zeilenumbrüche ggf. richtiggestellt werden.

                  So passt es mir natürlich am besten, denn das war der Zustand, von dem ich immer ausgegangen war, bis ihr mich mit eurem \n-Zeugs durcheinander gebracht habt. ;-)

                  Caramba!
                  Grüße aus Biberach Riss,
                  Candid Dauth (ehemals Dogfish)

                  --
                  „Erwecke niemals bei jemandem dem Eindruck, dass er etwas anders machen solle, weil er es anders macht als du, wenn er es besser macht als du.“ | Mein SelfCode
                  http://cdauth.net.tc/
      2. Hi,

        Ja Ich weiß, das Probmlem ist, dass es nicht funktioniert, wenn ich schreibe: $text=ereg_replace("\n\n", "\n", $text);

        schon mal damit versucht:
        str_replace("\n\n", "\n", $text);

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        1. Hallo,

          schon mal damit versucht:
          str_replace("\n\n", "\n", $text);

          Ja gerade eben; funktioniert aber nicht!
          Es muss folglich irgendetwas zwischen den beiden Umbrüchen stehen!?

          1. Hi,

            Es muss folglich irgendetwas zwischen den beiden Umbrüchen stehen!?

            das wäre sowieso ein Problem. Was, wenn ein User folgendes schreibt:
            "Hallo
                      //Leerzeichen
                      //Leerzeichen
                      //Leerzeichen
            Tschüss!"

            Damit hätte er das Script quasi ausgehebelt!

            MfG Hopsel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            1. Hast du vielleicht einen anderen Vorschlag um solche Fälle zu unterbinden?
              Wäre für einen Vorschlag wirklich sehr dankbar

              Markus

              1. Hi Markus,

                Hast du vielleicht einen anderen Vorschlag um solche Fälle zu unterbinden?

                Da kannst du mit einem RegEx dran gehen, nimm dazu die Funktion preg_replace().

                Um beliebig viele aufeinanderfolgende Leerzeichen zu matchen musst du so was schreiben:

                /( )*/

                Aber ganz unabhängig solltest du dich noch mal mit dem auseinandersetzen, was Cheatah dir gesagt hat - nämlich dass die Zeilenumbrüche von verschiedenen Systemen unterschiedlich aussehen und nicht immer (nur) aus \n bestehen.

                MfG, Dennis.

                1. Hello,

                  Aber ganz unabhängig solltest du dich noch mal mit dem auseinandersetzen, was Cheatah dir gesagt hat - nämlich dass die Zeilenumbrüche von verschiedenen Systemen unterschiedlich aussehen und nicht immer (nur) aus \n bestehen.

                  Das ist zwar so, dass unterschiedliche Betriebssysteme unterschiedliche Codes für Zeilenumbrüche haben, aber die Browser sollten diese immmer OS-unabhängig zu "\r\n", eigentlich zu '0dh 0Ah' ergänzen. Dass das nicht alle tun, sollte uns auch klar sein.

                  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,

                    Das ist zwar so, dass unterschiedliche Betriebssysteme unterschiedliche Codes für Zeilenumbrüche haben, aber die Browser sollten diese immmer OS-unabhängig zu "\r\n", eigentlich zu '0dh 0Ah' ergänzen. Dass das nicht alle tun, sollte uns auch klar sein.

                    OK, war mir so gar nicht bewusst - aber wie du selber sagst, besser selber um das "Konvertieren" zu \r\n kümmern ;-)

                    Mal schauen, so müsste es doch eigentlich gehen:

                    echo preg_replace("/([^\r]\n|\r[^\n])/", "\r\n", $string);

                    Kommt in $string ein ein \n, vor dem kein \r ist oder ein \r, nach dem kein \n ist vor, so wird es durch \r\n ersetzt.

                    Richtig gedacht?

                    MfG, Dennis.

    2. Hello,

      LOL
      Du hast dir deine Frage doch schon selbst beantwortet.

      ... aber nicht konsequent zu Ende gedacht.

      Funktionierende Browser senden kein "\n" sondern ergänzen die Zeilenumbrüche ("\r" und "\n") vorher zu "\r\n", und zwar unabhängig vom Betriebssystem.

      Ob die Synonyme hier benutzt werden dürfen, oder besser durch 0Dh und 0Ah ersetzt werden müssen, liegt an der Hochsprache, mit der die Auswerteroutine erstellt wurde. Bei PHP darf man mit "\r\n" arbeiten, da sie nicht nochmals ersetzt werden.

      Markus muss also zuerst alle verstümmelten Zeilenumbrüche vervollständigen, dann schauen, ob es ggf. noch die Kombination "\r\n    \r\n" gibt, wobei die Anzahl der Leerzeichen oder anderer unsichtbarer Zeichen zwischen den Zeilenumbrüchen variabel ist.

      Er wird also wahrscheinlich nicht um ein entsprechend schlau geschrieben Funktion herumkommen oder aber eine vorhande (regular Expressions) dafür zu benutzen.

      Gnaz so einfach, wie Du, Hopsel, Dir das vorstellst, ist es eben doch nicht.

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

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  2. hi,

    Ich bin gerade dabei ein Gästebuch für meine HP zuschreiben.
    Funktioniert auch soweit ganz gut. Nur hab' ich jetzt folgendes Problem:
    Ich will im Nachrichtentextfeld nur einen Umsprung pro Zeile erlauben.

    wenn du damit zu verhindern suchst, dass manche leute seltsam formatierte einträge verfassen, die dich ärgern sollen -
    .
    .
    .
    dann
    .
    .
    .
    lass
    .
    .
    .
    dir
    .
    .
    .
    gesagt
    .
    .
    .
    sein,
    .
    .
    .
    dass
    .
    .
    .
    das
    .
    .
    .
    so
    .
    .
    .
    nicht
    .
    .
    .
    funktionieren
    .
    .
    .
    wird!

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }