Forumscript mit (leichten) Unsicherheiten
Christoph Schnauß
- perl
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.
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
<a href="http://forum.de.selfhtml.org">http://forum.de.selfhtml.org</a>
Viele Grüße
lulu
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.
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"
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
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
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
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.
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)
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.
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.
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 & Gute Nacht
lulu
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.
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
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.
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
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 ...)
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
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
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.
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.