DanielD: Den Wert eines Textarea-Feldes auslesen und kontrollieren ähnlich hier !

ich möchte den Inhalt, den ein TEXTAREA-Feld eines HTML-Formulars zurückliefert dahingehend bearbeiten, dass ich es für eine HTML-Seite benutzen kann. Ähnlich einem Forum.
Also ich möchte konkret:

HTML-tags ungültig machen (durch < usw. ersetzen)
und Adressen (http://...) gleich als Link zurück geben

Kann mir da vieleicht jemand weiterhelfen ?! Ich bin grade voll am verzweifeln :o( Komm mit dem ganzen PatternMatching nicht klar

Danke .. DanielD

  1. Hi,

    erstmal: egal, wie sehr man "am Verzweifeln" ist, Zeit für ein Hallo
    sollte IMMER gegeben werden.

    ich möchte den Inhalt, den ein TEXTAREA-Feld eines HTML-Formulars
    zurückliefert dahingehend bearbeiten, dass ich es für eine HTML-
    Seite benutzen kann. Ähnlich einem Forum.

    Wenn ich dich richtig verstanden habe, möchtest du den Inhalt eines
    Text-Area-Feldes in einem Formular zurückgeben.
    Die Frage ist nur: mit welcher Sprache? Das geht sogar mit JS ,)

    Also ich möchte konkret:

    HTML-tags ungültig machen (durch < usw. ersetzen)
    und Adressen (http://...) gleich als Link zurück geben

    Kann mir da vieleicht jemand weiterhelfen ?! Ich bin grade voll
    am verzweifeln :o( Komm mit dem ganzen PatternMatching nicht klar

    Naja, ich gehe mal davon aus, daß du PERL benutzt (wg.
    Pattern-Matching - geht zwar in anderen Sprachen aus, aber ist da
    eher ein nützliches Tool und sie sind nicht so berühmt dafür wie
    PERL ,))

    Also, du weißt ja (hoffentlich), wie man Daten in einem Perl-Script
    annimmt und decodiert - denn davon werde ich jetzt ausgehen ,)

    Nun, die decodierten Daten müssen, um HTML auszuschalten, entweder
    alle HTML-Tags raussuchen (z. B. über einen Array, in dem alle
    gespeichert sind) oder sie anders irgendwie unschädlich machen.
    Naja, am besten eignet sich da ja wohl die HTML-Tags als solche
    unkenntlich zu machen: < durch < und > durch > zu ersetzen ,)
    also:

    $text =~ s/<(.*)>/&$1;/g;

    Als nächstes nehmen wir uns den Link vor: wie ist eine Adress-Angabe
    aufgebaut?
    Also, es gibt mehrere Möglichkeiten:

    http://subdomain.domain.toplevel
    http://domain.toplevel
    subdomain.domain.toplevel
    domain.toplevel
    user@domain.toplevel

    Du siehst, in einem Ausdruck geht das also nicht so einfach, leichter
    wären zwei.
    Also:

    #um http-Adress-Angaben rauszufiltern
    $text =~ s/http://(.*..*)\s/<a href="$1" target="_top">$1</a>/g;

    Jetzt muß noch der Rest rausgefiltert werden; nun, wir haben aber
    leider kein Aussage-Kräftiges Identifikations-Zeichen (außer für
    eMails das @). Also überleg dir, wie die Toplevels aussehen:
    .net
    .ch
    .de
    .com
    .tw

    Du siehst, sie haben alle max 3 Buchstaben und einen Punkt, aber
    KEINE (!) Nummern.
    Also können wir einen Teil der Identifikation schonmal aufstellen:
    /.[a-zA-Z]{2,3}/

    Gut, jetzt haben wir aber den Rest noch nicht...
    OK, jetzt müssen wir einschränkungen machen: der Link MUSS durch ein
    Leer-Zeichen und/oder ein sonstiges White-Space-Zeichen von dem
    Rest des Textes getrennt sein. Dann können wir den zweiten Teil
    vereinbaren:

    $text =~ /\s(.*.([a-zA-Z]{2,3}))\s/<a href="$1" target="_blank">$1</a>/g;

    Jetzt noch die Mails:
    $text =~ /\s(.*@.*.([a-zA-Z]{2,3}))/<a href="mailto:$1">$1</a>/g;

    Das ist zwar immer noch sehr unsicher, aber das beste, was ich so
    in ner halben Stunde aus dem Ärmel schütteln konnte ,)

    mfg
    CK1

    1. Hi,

      $text =~ s/<(.*)>/&$1;/g;

      muß natürlich

      $text =~ s/<(.*)>/<$1>/g;

      heißen ,)

      Ach ja, Alex hat mich noch auf ne gute Idee gebracht:

      $text =~ s/([<>])/"&#".ord($1).";"/eg;

      find ich echt ne gute Idee ,) in ([<>]) kann jedes bel.
      Sonderzeichen drin stehen, es wird durch das entsprechende
      HTML-Entinity ersetzt.

      mfg
      CK1

      1. Hallo Christian,

        Bevor die Verwirrung jetzt komplett ist, versuch ich mal die Html-Entities einzufügen ;-)

        $text =~ s/<(.*)>/&$1;/g;
        muß natürlich
        $text =~ s/<(.*)>/<$1>/g;

        ^..^....= < und >

        heißen ,)

        Ach ja, Alex hat mich noch auf ne gute Idee gebracht:
        $text =~ s/([<>])/"?".ord($1).";"/eg;

        ^....= &#

        Hoffentlich stimmt das jetzt auch, nicht daß wieder irgendwas verschluckt wurde ;-))

        Gruß AlexBausW

        P.S.: Ich musste ja unbedingt noch mal den Reload-Button betätigen, bevor ich ins Bett gehe, statt es bleiben zu lassen, und auf ein so spätes Posting zugunsten des Schönheitsschlafs zu verzichten ;-)) *fasthalbschlaf*