PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : umbruchproblem bei perl/CGI


RIDE
19.09.2002, 14:19
sers @all

mein 1. beitrag hier *LOL*, ich bin gerade dabei mein eigenes Forum in Perl/CGI zu schreiben, aber da hab ich einige kleine problemchen:

1. Wenn der user einen neuen beitrag erstellen will und bei dem text, den er in das <textarea> feld eingibt, kein enter nach jeder zeile drückt, dann wird der gesamte text bei der topicanzeige in eine lange zeile geschrieben, d.h. er bricht nicht um. ich gebe den text mit dem html-tag <pre> </pre> aus, damit absätze übernommen werden und allgemeine formatierung des textes. kann mir bitte einer sagen, wie ich das schaffe, dass der text nicht in einer zeile ausgegeben wird? kann ja schließlich von meinen zukünftigen usern nicht verlangen, dass sie jede zeile mit enter bestätigen!

2. habe html und javascript in meinem forum deaktiviert. ich habe einfach die zeichen < und > verboten und bei eingabe dieser zeichen kommt ne fehlermeldung. aber bei dem *html/Javascript* forum kann ich diese zeichen ja wohl schlecht verbieten, da vielleicht jemand einen beispiel htmlcode reinschreiben will. wenn ich dies zulasse, dann wird der html code aber leider nicht angezeigt, sondern in den QT der html datei mit eingebunden.
&lt; ist ein syn. für < und &gt; eins für > , damit würde der html code nicht ausgeführt werden, aber wie kann ich nun aus einem string alle < > herausfiltern und durch &lt; und &gt; ersetzen?


thx für antworten schon im vorraus, ciau


Lord_Otter
19.09.2002, 14:42
Ich programmiere auch gerade ein Forum, aber in PHP.
Ist schon ziemlich weit, man kann Threads erstellen, antworten, lesen, sich registrieren, etc. Bin gerade bei Umfragen, hoffentlich wird's besser als vBulletin (glaub' ich aber eher nicht).
Aber nun zu deinen Fragen:

1. Das ist mit HTML zu realisieren. Gib die Topics einfach in einer Tabelle aus und lege die Breite fest !
Wenn eine Zeile dann länge wird als die Tabelle breit ist, wird der Text umbrochen.
Versuchs doch msl so:

...
<table width=100%>
<tr>
<td width=30%> (Informationen über den Beitrag/Topic)</td>
<td width=70%> (Beitrag) </td>
</tr>
(weitere Beiträge zeigen)
</table>
...

So müsste das gehen.

2. Ich kann kein Perl, nur PHP, also kann ich hier leider nicht antworten.

Jonas
19.09.2002, 16:04
ad 1) keine ahnung was du meinst. Ersetzt du auch umbrüche durch <br>?
ad 2) siehe unten:


$text =~ s/</&lt;/g;
$text =~ s/>/&gt;/g;
$text =~ s/\n/<br>/g;

das br ersetzen muss ans ende, da sonst das <br> auch durch die entsprechenden platzhalter ersetzt werden

Lord_Otter
19.09.2002, 17:37
@Jonas:
Was er bei 1.) meint, ist klar:
Man kann zwar alle "\n"s duch "<br>" ersetzen, aber nicht Textstellen, die kein "\n" erhalten.
Tippe mal einen 100 Wörter langen Text ein, ohne die Entertaste zu drücken.
Dann wird er zwar in der Textarea umbrochen, allerdings in der Datei oder Datenbank, wo er gespeichert wird, sind die Zeilenumbrüche nicht vorhanden.
Die entstehen nur, wenn man Enter drückt.
Er kann also die Stellen nicht finden, die durch <br> ersetzt werden sollen.
Alles klar ?

Jan Krüger
19.09.2002, 18:12
das mit dem <pre> ist eine ganz schlechte idee. besser \n durch <br /> ersetzen (regex: s/\n/<br \/>/g;), wie jonas schon sagte. und überlange wörter auseinanderreißen geht auch:
s/([^ \n]{20})([^ \n])/$1 $2/g;
diese regex reißt wörter nach 20 zeichen auseinander.

Jonas
19.09.2002, 23:47
Original geschrieben von Lord_Otter
@Jonas:
Was er bei 1.) meint, ist klar:
Man kann zwar alle "\n"s duch "<br>" ersetzen, aber nicht Textstellen, die kein "\n" erhalten.
Tippe mal einen 100 Wörter langen Text ein, ohne die Entertaste zu drücken.
Dann wird er zwar in der Textarea umbrochen, allerdings in der Datei oder Datenbank, wo er gespeichert wird, sind die Zeilenumbrüche nicht vorhanden.

Jo, aber jeder Browser bricht ja dann da um, wo die Breite zu ende ist. Da muss man nix umformen. Nur das von Jast erwähnte mit den überlangen Wörtern...

RIDE
20.09.2002, 15:47
ok, thx für die antworten...

also, der browser bricht nach ner zeit leider nicht um, muss man halt ewig lang nach rechts scrollen, ... zumindest nicht internet-explorer :) und die begrenzungen in den tabellen, mit denen habe ich es auch schonmal versucht, aber da habe ich einfach bloß width=700 angegeben und nicht in prozent, ich könnte mir vorstellen, dass es mit % gehen würde.. und des mit '<' und '>' dürfte jetz geklärt sein, ich probiers ma aus, thx @all

ciau

Jonas
20.09.2002, 19:33
klar, daß er net umbricht, wenn du das zeug in <pre> schreibst