Christoph Schnauß: Forumscript mit (leichten) Unsicherheiten

n'abends, Forum ;-)

ich knabbere an einer Sache herum, für die ich mal paar sachliche Rippenstöße brauche. Ich habe mir das "alte" Matt-Wright-Script hergenommen und für einen Zweck zurechtgeschraubt, den es (noch) erfüllen kann. Es funktioniert auch.

Das Problem: Besucher "meines" Forums können zwar  -  ähnlich wie hier  -  HTML-Code in postings schreiben oder Bilder einfügen, das wird auch brav als anklickbarer link angezeigt. Wenn nun aber jemand auf so ein posting mit anklickbarem link antwortet, ist der vorherige link in der neuen Antwort (followup) plötzlich nicht mehr anklichkbar. Das heißt, die eingesetzten RegExpressions sind irgendwo/irgendwie nicht korrekt.

Die Adresse, an der sich das nachlesen läßt, ist http://home.arcor.de/schnauss/kursforum/, das zugrundeliegende Script gibts dort auch auf dem aktuellen Stand zur Einsicht.

Eine Bitte, falls jemand nachschaut: es gibt "known bugs". Das Script produziert wegen fehlender DOCTYPE-Zeile keine validierbaren HTML-files, und die CSS-Formatierung ist noch nicht konsequent durchgestylt.

Grüße aus Berlin

Christoph S.

  1. Huhu Christoph

    das Problem könnte daran liegen, dass bei den Replys die Entities in der Textarea evtl. mehrfach ersetzt werden.

    Ungefähr so

    aus

    <a href="http://forum.de.selfhtml.org">http://forum.de.selfhtml.org</a>

    wird

    <a href="http://forum.de.selfhtml.org">http://forum.de.selfhtml.org</a>

    und dann evtl. sogar

    &lt;a href=&quot;http://forum.de.selfhtml.org&quot;&gt;http://forum.de.selfhtml.org&lt;/a&gt;

    Viele Grüße

    lulu

    1. jo, lulu,

      das Problem könnte daran liegen, dass bei den Replys die Entities in der Textarea evtl. mehrfach ersetzt werden.

      irgendwo/irgendwie is dat wohl so :-(

      Lösungsvorschläge, die ich noch nicht probiert hab?

      Christoph S.

      1. Hi Christoph

        ich hatte das Problem auch mal so ähnlich, dass war bei einem kleinen CMS und da werden alle Einträge mit_ohne_entities in die mySQL-DB geschrieben.

        auf dem Weg von der Datenbank zurück in die Textarea passiert dann Folgendes:

        [1]
        // hier textarea tags maskieren
        $feldwert=eregi_replace("</textarea>","</textarea>",$feldwert);

        [2]
        // hier ampersand maskieren
        $feldwert=ereg_replace("&","&",$feldwert);

        Ich hoffe ich habe nichts übersehen, aber [2] scheint wirklich ausreichend zu sein.

        Viele Grüße

        lulu

        [1] ist nur nötig wenn man auch html-Textarea-Tags speichern möchte, da es einem sonst das Formular "zerschiesst"

        1. Moin!

          ich hatte das Problem auch mal so ähnlich, dass war bei einem kleinen CMS und da werden alle Einträge mit_ohne_entities in die mySQL-DB geschrieben.

          auf dem Weg von der Datenbank zurück in die Textarea passiert dann Folgendes:

          [1]
          // hier textarea tags maskieren
          $feldwert=eregi_replace("</textarea>","</textarea>",$feldwert);

          [2]
          // hier ampersand maskieren
          $feldwert=ereg_replace("&","&",$feldwert);

          Ich hoffe ich habe nichts übersehen, aber [2] scheint wirklich ausreichend zu sein.

          [1] ist nur nötig wenn man auch html-Textarea-Tags speichern möchte, da es einem sonst das Formular "zerschiesst"

          Ich möchte widersprechen: Die Textarea verhält sich am besten, wenn man _alle_ HTML-aktiven Zeichen in Entities umsetzt:
          < wird <

          wird >

          & wird &
          " wird "

          In PHP ist sowas schnell mit htmlspecialchars("string") erledigt, in Perl muß man etwas ausführlicher programmieren. :)

          Wenn die Textarea angezeigt wird, sieht man die gewünschten Zeichen wieder, und genau so werden sie auch abgeschickt und kommen beim Server an. Textareas müssen also nur beim Befüllen gewandelt werden, sie wandeln automatisch zurück.

          - Sven Rautenberg

          1. Hoi,

            In PHP ist sowas schnell mit htmlspecialchars("string") erledigt, in Perl
            muß man etwas ausführlicher programmieren. :)

            Was ist an

            use HTML::Entities;
            encode_entities("string");

            ausfuehrlicher?

            Was ich an Christophs Stelle tun wuerde (ausser die Benutzung von CGI.pm ;-),
            waere, in der Textarea die Links als <> zu notieren, also die
            Transformierung von <> in <a href> erst spaeter zu machen und nicht direkt
            in 'get_variables'.

            Gruesse,
             CK

            1. Yo!

              Was ist an

              use HTML::Entities;
              encode_entities("string");

              ausfuehrlicher?

              Das sind mindestens zwei Zeilen mit zwei Anweisungen. Also "etwas ausführlicher".

              Außerdem macht encode_entities vermutlich nicht ganz das selbe, sondern erschlägt gleich noch Umlaute und Sonderzeichen. Das sollte zwar im Prinzip kein Problem sein, könnte aber vielleicht auch stören.

              Was ich an Christophs Stelle tun wuerde (ausser die Benutzung von CGI.pm ;-),
              waere, in der Textarea die Links als <> zu notieren, also die
              Transformierung von <> in <a href> erst spaeter zu machen und nicht direkt
              in 'get_variables'.

              Viva la Selfforum-Link! ;)

              - Sven Rautenberg

            2. ouch ...

              Was ist an
              use HTML::Entities;
              encode_entities("string");
              ausfuehrlicher?

              ich merk schon, ich muß das gute alte Stück radikal modernisieren, damit Michael Schröpl nicht auch noch den Zeigefinger wegen fehlendem "use strict" heben kann. Der Provider hat die Module alle

              Was ich an Christophs Stelle tun wuerde waere, in der Textarea die Links als <> zu notieren, also die
              Transformierung von <> in <a href> erst spaeter zu machen

              hrm. Ich sehe, ich werd meinen Holunderwein morgen (heute) neben meinem Rechner aufmachen müssen und nicht in irgendeiner Kumpelrunde ...

              herzlich

              Christoph S.

              1. Hi Christoph,

                Was ist an
                use HTML::Entities;
                encode_entities("string");
                ausfuehrlicher?

                Wenig.
                (Ich würde sogar
                     HTML::Entities::encode_entities("string");
                schreiben - ich schreibe externe Modulnamen immer dazu.)

                ich merk schon, ich muß das gute alte Stück radikal
                modernisieren, damit Michael Schröpl nicht auch noch
                den Zeigefinger wegen fehlendem "use strict" heben kann.

                Seit wann bin ich hier der Perl-Purist?
                (Ich lese ja noch nicht mal perldocs ...)

                Viele Grüße
                      Michael
                (der gerade vor dem Problem steht, einerseits zuerst
                "encode_entity()" auf ein Dokument anwenden zu wollen -
                später geht das nicht mehr, ich baue massenhaft HTML-Tags
                dort rein - und _danach_ eine effiziente Methode sucht, um
                Zeilen zu erkennen, die keine Kleinbuchstaben enthalten ...
                eine Kristallkugel-Logik zur Erkennung von Überschriften)

                1. hallo Michael,

                  Seit wann bin ich hier der Perl-Purist?
                  (Ich lese ja noch nicht mal perldocs ...)

                  och ... also ich glaube, daß außer Stefan Münz nur 17 Leute im Forum überhaupt verstehen, was ein "Purist" ist. Und dazu wäre zu bemerken, daß man deinen postings ja eine gewisse argumentative Strenge nicht abprechen kann ;-)

                  Grüße

                  Christoph S.

          2. hi Sven,

            Wenn die Textarea angezeigt wird, sieht man die gewünschten Zeichen wieder, und genau so werden sie auch abgeschickt und kommen beim Server an.

            richtig  -  und bis dahin auch kein Problem

            Textareas müssen also nur beim Befüllen gewandelt werden, sie wandeln automatisch zurück.

            ahja  -  und da scheints dann jetzt bei mir zu hängen. Möglicherweise inzwischen sowas wie "Betriebsblindheit", ich kenne mein Script nun wirklich auswendig und könnte es singen (ähm  -  ich bin musikalisch, habe Konzertausbildungen an mehreren Instrumenten).
            Ich habe dutzendemal an den Stellen, an denen es um die textarea geht, herumgebastelt, bin aber nicht weitergekommen, deswegen hab ich diesen Hilferuf ja ins Forum gestellt.

            Hast du einen am Originalscript orientierten Vorschlag ?

            Grüße

            Chgristoph S.

          3. Moin Sven

            Ich möchte widersprechen: Die Textarea verhält sich am besten, wenn man _alle_ HTML-aktiven Zeichen in Entities umsetzt:

            Ok, einverstanden

            Viele Grüße &amp; Gute Nacht

            lulu

        2. hallo lulu,

          [2]
          // hier ampersand maskieren
          $feldwert=ereg_replace("&","&",$feldwert);
          Ich hoffe ich habe nichts übersehen

          doch, leider. Was du angibst, funktioniert mit PHP ganz gut, aber nicht im gleichen Maß mit PERL.

          ratlose Grüße

          Christoph S.

  2. n'abends, Forum ;-)

    ich knabbere an einer Sache herum, für die ich mal paar sachliche Rippenstöße brauche. Ich habe mir das "alte" Matt-Wright-Script hergenommen und für einen Zweck zurechtgeschraubt, den es (noch) erfüllen kann. Es funktioniert auch.

    Das Problem: Besucher "meines" Forums können zwar  -  ähnlich wie hier  -  HTML-Code in postings schreiben oder Bilder einfügen, das wird auch brav als anklickbarer link angezeigt. Wenn nun aber jemand auf so ein posting mit anklickbarem link antwortet, ist der vorherige link in der neuen Antwort (followup) plötzlich nicht mehr anklichkbar. Das heißt, die eingesetzten RegExpressions sind irgendwo/irgendwie nicht korrekt.

    Die Adresse, an der sich das nachlesen läßt, ist http://home.arcor.de/schnauss/kursforum/, das zugrundeliegende Script gibts dort auch auf dem aktuellen Stand zur Einsicht.

    Eine Bitte, falls jemand nachschaut: es gibt "known bugs". Das Script produziert wegen fehlender DOCTYPE-Zeile keine validierbaren HTML-files, und die CSS-Formatierung ist noch nicht konsequent durchgestylt.

    Grüße aus Berlin

    Christoph S.

    Schönen abend Christoph,

    noch ein kleiner Hinweis:

    <textarea name="body" cols="80" rows="20" style="font-family: Courier New,Courier; font-size:10pt; color:#000080">
    macht Dein Forum für Netscape 4 völlig unbrauchbar. Das gesamte Formular ist deshalb unsichtbar.

    Für Netscape 4 wäre das so viel freundlicher:

    im Body
    <textarea name="body" cols="80" rows="20">

    im Head
    <style type="text/css"><!--
    textarea {
    font-family:Courier New,Courier;
    font-size:10pt;
    color:#000080;
    }
    --></style>

    Die CSS-Angaben für die textarea kannst Du ja auch in die "forum.css" schreiben anstatt in den Head.

    Grüße von SabineP

    1. hallo Sabine,

      <textarea name="body" cols="80" rows="20" style="font-family: Courier New,Courier; font-size:10pt; color:#000080">
      macht Dein Forum für Netscape 4 völlig unbrauchbar. Das gesamte Formular ist deshalb unsichtbar.

      Ja, das weiß ich. Und  -  mit Verlaub  -  es ist mir wurscht. Ich habe mich entschlossen, auf Netscape 4.xx keinerlei Rücksicht mehr zu nehmen.

      Trotzdem ein Dankeschön für den Hinweis ;-)

      herzlich

      Christoph S.

      1. hi

        Ja, das weiß ich. Und  -  mit Verlaub  -  es ist mir wurscht. Ich habe mich entschlossen, auf Netscape 4.xx keinerlei Rücksicht mehr zu nehmen.

        ich glaub' die Diskussion werden wir noch oft, sehr oft führen... Fakt ist, dass sich NN4 zumindest hier auf SelfHTML derzeit nur noch mit Opera 6.0 um Rang 5 in den Stats kloppt, im Forum alleine kann er selbst davon nur noch träumen.. Nur leider gibt es ein paar bereiche, wo irgendwelche Betonköpfe das Sagen haben und das Ding immer noch für das Maß der Dinge halten :(

        Grüße aus Bleckede

        Kai

    2. Hi Sabine,

      <textarea name="body" cols="80" rows="20" style="font-family: Courier New,Courier; font-size:10pt; color:#000080">
      macht Dein Forum für Netscape 4 völlig unbrauchbar. Das gesamte Formular ist deshalb unsichtbar.

      gilt das immer noch, wenn
      a) nach jedem ":" kein Leerzeichen steht,
      b) nach jedem ";" kein Leerzeichen steht und
      c) am Ende ein zusätzliches Semikolon eingefügt wird?

      Viele Grüße
            Michael
      (der grübelt, wie man "Courier New" wohl innerhalb von style="" korrekt quotet ...)

      1. hi

        gilt das immer noch, wenn
        a) nach jedem ":" kein Leerzeichen steht,
        b) nach jedem ";" kein Leerzeichen steht und
        c) am Ende ein zusätzliches Semikolon eingefügt wird?

        ich bin mir nichtmal sicher, ob nicht jegliches CSS auf eine <textarea> todlich ist (ähnlich <object> oder <img/>

        (der grübelt, wie man "Courier New" wohl innerhalb von style="" korrekt quotet ...)

        'Courier New' ?

        Grüße aus Bleckede

        Kai

      2. Hi Sabine,

        Hallo Michael,

        <textarea name="body" cols="80" rows="20" style="font-family: Courier New,Courier; font-size:10pt; color:#000080">
        macht Dein Forum für Netscape 4 völlig unbrauchbar. Das gesamte Formular ist deshalb unsichtbar.

        gilt das immer noch, wenn
        a) nach jedem ":" kein Leerzeichen steht,
        b) nach jedem ";" kein Leerzeichen steht und
        c) am Ende ein zusätzliches Semikolon eingefügt wird?

        Der Linksetzer hat mir gezeigt, wo es den richtigen Syntax für "Inline Style" gibt:
        http://forum.de.selfhtml.org/?m=64217&t=11578

        Wenn man alternativ die CSS-Angaben in den Head schreibt, kann sogar der Netscape 4 eine Textarea mit CSS formatieren.

        Allerdings hat das Forum einige schlimme HTML-Fehler in der Tabelle:
        http://validator.w3.org/check?uri=http%3A%2F%2Fwww.christoph-schnauss.de%2Fmisc%2Fkurs%2Fforum%2Fdaten%2F31.htm&charset=(detect+automatically)&doctype=HTML+4.01+Transitional

        Ich glaube mittlerweile, daß diese HTML-Fehler in erster Linie dafür verantwortlich sind, daß das Formular in Netscape 4 nicht angezeigt werden kann.

        Viele Grüße
              Michael
        (der grübelt, wie man "Courier New" wohl innerhalb von style="" korrekt quotet ...)

        Grüße von SabineP

        1. hi,

          Wenn man alternativ die CSS-Angaben in den Head schreibt, kann sogar der Netscape 4 eine Textarea mit CSS formatieren.

          Allerdings hat das Forum einige schlimme HTML-Fehler in der Tabelle:
          http://validator.w3.org/check?uri=http%3A%2F%2Fwww.christoph-schnauss.de%2Fmisc%2Fkurs%2Fforum%2Fdaten%2F31.htm&charset=(detect+automatically)&doctype=HTML+4.01+Transitional

          ach, da sind noch mehr Fehler drin. Ich sagte ja im Ausgangsposting, daß ich diese Stellen bereits selber als "buggy" kenne.

          Grüße aus Berlin

          Christoph S.

  3. hallo ;-)

    so, jetzt hab ichs mit etwas Fuzzelei doch noch hingekriegt. Ausschlaggebend war der Hinweis auf die Textarea, so, wie er von lulu kam. Ich hab die Variable, in der die textarea gespeichert wird, nochmal aufgesplittet in zwei Variablen, die dann unterschiedlich mit RegExpressions behandelt werden, und damit gings dann.

    Jetzt müssen bloß noch die HTML-Ausgaben valide gemacht werden und die CSS muß korrigiert werden.

    Grüße aus Berlin

    Christoph S.