Kann man den folgenden CGI Script so bearbeiten, dass Sonderzeichen auf der "neuigkeiten.html" Seite richtig dargestellt werden? Bzw. Absätze übernommen werden, damit man im Formular nicht jedes Mal <br> schreiben muss.
Erst mal.
Speichere deine Scripte im gleichen Zeichensatz ob.
Vorzugsweise UTF-8 ohne BOM
Wenn du im Perlscript direkt Variablen definierst wie
my $example='äöü';
dann braucht perl zudem für UTF-8
use :utf8;
Dein Perlscript sollte einen httpheader mit der richtigen charset angabe ausgeben.
print "Content-Type:text/html; charset=UTF-8\n\n";
use CGI qw(:standard) ;
use strict;
use warnings;
use :utf8; # wegen direktem textinput "Gästenbuch";
@datei = "$pfad/$data" ;
Kein Array! sondern ein String
my $datei = $pfad .'/'.$data;
print header();
charset Angeben!
$kom = param("kommentar") ;
my...
Kopieren an diesem Punkt aber überflüssig!
open(FILE,"@datei");
open(INFILE '<', $datei) or die ('Fehler File '. $datei. $! );
@lines = <FILE>;
my @lines = <INFILE>;
close(FILE);
close(INFILE);
...
@monate = ('01','02','03','04','05','06','07','08','09','10','11','12');
($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
if ($mday < 10) { $mday = "0$mday"; }
if ($year > 99) { $year = $year + 1900; }
$date = "$mday.$monate[$mon].$year ";
hier wäre es besser mit sprintf() zu arbeiten.
my (undef,undef,undef,$mday,$mon,$year,undef) = localtime(time)
my $date = sprintf("%02.%02d.%04d",
$mday, $mon+1, $year+1900 );
Eintrag ins Gästebuch hinzufügen:
open (FILE,">@datei");
open(OUTFILE '>', $datei) or die ('Fehler Schreiben von File '. $datei. $! );
foreach $line (@lines) {
foreach my $line (@lines) {
if ($line =~ /<!--name-->/) {
print FILE "<!--name-->\n" ;
print OUTFILE...
print FILE qq~
Eintrag am $date<br><br><b>$kom</b><br><br>
Einspruch. Dein $kom enthält eventuell HTML
also
<b>~ . sanitize_html($kom) . qq~</b><br><br>
Zudem kann $kom an dieser Stelle leer sein...
<hr noshade size=2><br>
~
}
else {
print FILE $line ;
print OUTFILE $line ;
}
}
close (FILE);
close (OUTFILE);
verwende die Drei-Argumente-Form von open.
Verwende für Filehandles entweder
my $infh, my $outfh
oder INFILE, OUTFILE.
Grund: Lesbarkeit. gleich benannte Filehandes im gleichen Blockscope von Typ FILE sind Fehleranfällig.
sub sanitize_html{
my $t = shift || '';
$t=~ s/</</g;
$t=~ s/>/>/g;
$t=~ s/&/&/g;
$t=~ s/"/"/g;
return $t;
}
&ende ;
veraltet. Verwende:
ende();
sub ende {
print <<ENDE ;
<div align="center"><br><br><br><br><br><br><br>
Danke für Ihren Eintrag!
<br><br>
<a href="http://irgendeineseite.de">Zurück zum Gästebuch</a>
<br><br><br><br><br><font size="-1">
</font></div>
ENDE
}
sub fehler { print "<b>Fehler: Kein Name <br>Bitte geben Sie Ihren Namen an! <br><br><a href="javascript:history.back(-1)">zurück</a>";
last;
}
sub fehler1 { print "<b>Fehler: Keine Nachricht <br>Bitte füllen Sie das Formular neu aus! <br><br><a href="javascript:history.back(-1)">zurück</a>";
last;
}
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische