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

Beitrag lesen

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