Gast: Absatzmarken in textarea

Hallo,

bei der Eingabe in ein textarea ergibt die Taste [Enter] offenbar den Code "\n", der aber nicht sichtbar ist. Ich möchte aber das Zeilenende von "zufälligen" Umbrüchen im Eingabefeld unterscheiden können.

Ich habe z.B. diesen Text mit 2x [Enter]:
"... sich das Ganze vor rund 25 Jahren abgespielt hat.

Manch einen Spitzenvertreter aus Politik ..."

Und möchte ihn so anzeigen:
"... sich das Ganze vor rund 25 Jahren abgespielt hat.¶

Manch einen Spitzenvertreter aus Politik ..."

Dafür codiere ich:

$beschreibung = str_replace("\n","¶\n",$row['beschreibung'];

bekomme aber diese Anzeige:
"sich das Ganze vor rund 25 Jahren abgespielt hat.

¶Manch einen Spitzenvertreter aus Politik"

Das entspräche doch der Codierung

$beschreibung = str_replace("\n","\n¶",$row['beschreibung'];

Wo ist mein Denkfehler?

Gast

  1. Tach!

    bekomme aber diese Anzeige:

    Wo bekommst du sie?

    Das entspräche doch der Codierung

    Was konkret vorliegt, lässt sich mit bin2hex() oder einfacher mit urlencode() anschauen.

    Wo ist mein Denkfehler?

    Vermutlich schaust du dir das durch einen Browser interpretierte Ergebnis an.

    dedlfix.

  2. Om nah hoo pez nyeetz, Gast!

    Hallo,

    bei der Eingabe in ein textarea ergibt die Taste [Enter] offenbar den Code "\n", der aber nicht sichtbar ist. Ich möchte aber das Zeilenende von "zufälligen" Umbrüchen im Eingabefeld unterscheiden können.

    Wo ist mein Denkfehler?

    Eigentlich sollte [Enter] den Code "\r\n" ergeben?

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Pol und Polizei.

  3. Hi,

    bei der Eingabe in ein textarea ergibt die Taste [Enter] offenbar den Code "\n", ...

    äh, ja und nein. Zeilenumbrüche werden je nach System unterschiedlich codiert.
    Unix-basierte Systeme (schließt Linux und neuere Mac OS mit ein) verwenden ein \n als Zeilenumbruch.
    Windows hat die Tradition von DOS übernommen, einen Zeilenumbruch als Kombination \r\n zu codieren.
    Und es soll Systeme geben (ältere Macs zum Beispiel), die nur ein \r verwenden.

    In den meisten Internet-Protokollen ist \r\n in den Spezifikationen festgelegt, und auch Web-Browser verwenden üblicherweise \r\n - auch unter Linux.

    $beschreibung = str_replace("\n","¶\n",$row['beschreibung'];

    bekomme aber diese Anzeige:
    "sich das Ganze vor rund 25 Jahren abgespielt hat.

    ¶Manch einen Spitzenvertreter aus Politik"

    Lass dir am besten mal die String Byte für Byte, Zeichen für Zeichen anzeigen, bevor du ihn bearbeitest. Dafür kann man, wie dedlfix gern vorschlägt, urlencode() "missbrauchen". Vermutlich bekommst du dann sowas:

    ... abgespielt+hat.%0D%0A%0D%0AManch+einen ...

    Wenn du deinen obigen Code darauf loslässt, bekommst du also die Kombination \r¶\n für die Zeilenumbrüche. Da wird für die Ausgabe offensichtlich das \r als Zeilenumbruch interpretiert, dann kommt das Absatz-Symbol, und das nachfolgende \n wird anscheinend ignoriert.

    So long,
     Martin

    --
    Nein, es ist nicht wahr, dass bei der Post Beamte schneller befördert werden als Pakete.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Wenn du deinen obigen Code darauf loslässt, bekommst du also die Kombination \r¶\n für die Zeilenumbrüche.

      Ja, sieht so aus. Da ich mit Linux arbeite, habe ich an \r nicht gedacht. Und dass der "Wagenrücklauf" bereits eine Zeile weiter schaltet, ist auch verwunderlich.

      Also muss ich wohl auf diese drei Möglichkeiten am Ende einer Zeile gefasst sein:

      \r, \n, \r\n
      naja, sicherheitshalber auch noch \n\r

      Da wird für die Ausgabe offensichtlich das \r als Zeilenumbruch interpretiert, dann kommt das Absatz-Symbol, und das nachfolgende \n wird anscheinend ignoriert.

      Ja, habe mal \n durch ??? ersetzt, da wird es sichtbar.

      Gast

      1. Jetzt klappt's mit Linux (mal sehen, ob auch mit Windoof). Ich codiere vor der Ausgabe:

        $beschreibung = str_replace("\n","&para;\n",str_replace("\r","",$row_trm['beschreibung']))

        und beim Empfang des Formulars:

        $beschreibung = str_replace("¶\n","\n",str_replace("¶\r","\r",trim( $_POST['beschreibung'] )));

        Auf wundersame Weise wurde das ausgegebene &para; zum ¶, obwohl wir uns ja innerhalb des HTML bewegen. Okay, das Formular hat

        accept-charset="UTF-8

        Gast

        1. was noch nicht gelöst ist, ist die Darstellung bei Betätigung der [Enter] Taste, sie sollte auch das Zeichen ¶ plus Zeilenumbruch ergeben.

          Wie könnte ich das machen ohne Javascript?

          Gast

          1. Hi,

            was noch nicht gelöst ist, ist die Darstellung bei Betätigung der [Enter] Taste, sie sollte auch das Zeichen ¶ plus Zeilenumbruch ergeben.
            Wie könnte ich das machen ohne Javascript?

            gar nicht. Das würde ja eine Ersetzung während der Eingabe erfordern.
            Außer Javascript fällt mir nichts ein, was dafür in Frage kommen könnte.

            Und eine Javascript-Lösung müsste noch mehr leisten, wenn sie komfortabel sein soll: Sie müsste nämlich auch den nachfolgenden Zeilenumbruch automatisch löschen, wenn das Absatz-Symbol gelöscht wird (und umgekehrt).

            Ciao,
             Martin

            --
            Success should be measured not so much by the position that one has reached in life,
            but by the obstacles one has overcome while trying to succeed.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        2. Hi,

          Auf wundersame Weise wurde das ausgegebene &para; zum ¶, obwohl wir uns ja innerhalb des HTML bewegen.

          natürlich - warum sollte ein Browser Verrenkungen machen und wieder Entity-Referenzen erzeugen?
          Ich habe mich vorhin schon gefragt, warum du das Zeichen nicht im Klartext schreibst.

          Ciao,
           Martin

          --
          In sein ist schon längst wieder out.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(