webForumDet fria alternativet

Censurera vissa namn eller ord

Programmeringur Perl, Python, Ruby och övrig CGI

8 svar · 194 visningar · startad av Gimbo

GimboMedlem sedan dec. 20001 626 inlägg
Frågan#1

Hejsan!

Jag undrar hur man gör för att sensurera vissa ord eller namn i ett cgi skript? alltså när de skriver ett visst namn så kommer den inte upp på sidan utan ett annat namn eller bara **** visas när de skriver det namnet, det är en never ending story jag har där jag inte vill att de ska skriva vissa namn...

skriptet ser ut så här:

#!/usr/bin/perl

# Enter the server path to the story page.
$path = "/web/sites/343/6suryoye/www.6suryoye.f2s.com/cgi-bin/story/story.html";

# If you want to force people to use their names when adding to the story,
# change the 0 in the next line to a 1.
$usename = 0;

# If you want to force people to use their e-mail addresses when adding to the
# story, change the 0 in the next line to a 1.
$useemail = 0;

##############################################################################
# If you don't want the script to tell you every time someone adds to the #
# story, you're done! #
##############################################################################

# If you want the script to tell you every time someone adds to the story,
# remove the # in front of the next line.
#$tellme = -1;

# Enter the path to your mail program
$mailprogram = "/usr/lib/sendmail";

# Enter your e-mail address here. Put a backslash (\) before the @.
$youremail = "you\@yourdomain.com";

##############################################################################
# Congratulations! You've finished defining the variables. If you want to, #
# you can continue screwing with the script, but it isn't necessary. #
##############################################################################

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<([^>]|\n)*>//g;
$value =~ s/<//g;
$value =~ s/>//g;
$FORM{$name} = $value;
}
print "Content-type: text/html\n\n";

if ($usename) {
unless ($FORM{'name'}) {
print "<html><head><title>Please enter your name.</title></head>\n";
print "<body background=\"http://www.utsikten.com/abraham/bglejon.jpg\\"><h1>Name required</h1>Please click back and enter\n";
print "your name.\n";
&sig;
}
}

if ($useemail) {
$temp = $FORM{'email'};
$temp =~ s/_/a/g; $temp =~ s/-/a/g;
unless ($temp =~ /\w+@\w+\.\w\w+/) {
print "<html><head><title>Please enter your e-mail.</title></head>\n";
print "<body background=\"http://www.utsikten.com/abraham/bglejon.jpg\\"><h1>E-mail required</h1>Please click back and enter\n";
print "your e-mail address.\n";
&sig;
}
}

unless ($FORM{'story'}) {
print "<html><head><title>You forgot something.</title></head>\n";
print "<body background=\"http://www.utsikten.com/abraham/bglejon.jpg\\"><h1>Please add to the story</h1>You're trying to\n";
print "add to the story. You can't do that unless you write\n";
print "something.\n";
&sig;
}

if ($FORM{'email'} && $FORM{'name'}) { $poster = "<a href=\"mailto:$FORM{'email'}\">$FORM{'name'}</a>"; }
elsif ($FORM{'name'}) { $poster = "$FORM{'name'}"; }
elsif ($FORM{'email'}) { $poster = "<a href=\"mailto:$FORM{'email'}\">$FORM{'email'}</a>"; }
else { $poster = "anonymous"; }

open(FILE,"$path");
@lines = <FILE>;
close(FILE);

open(FILE,">$path");
foreach $line(@lines) {
if (substr($line,0,10) eq "<!--add-->") {
print FILE "<tr><td width=\"190\"><center>This paragraph is by\n";
print FILE "$poster</center></td><td width=\"350\">\n";
print FILE "     $FORM{'story'}</td></tr>\n";
print FILE "<!--add-->\n";
}
else { print FILE "$line"; }
}

print "<html><head><title>TACKAR!</title></head><body background=\"http://www.utsikten.com/abraham/bglejon.jpg\\"\>\\n";
print "Tack för att du la dit din fortsättning! Klicka på back knappen och uppdatera sidan\n";
print "för att se din fortsättning. Om inte din fortsättning dyker upp på en gång så dyker den upp senare, du beöver inte klicka på add story knappen flera gånger, din fortsättning kommer upp, jag lova!!!\n";

if ($tellme) {
open (MAIL,"|$mailprogram -t");
print MAIL "To: $youremail\n";
print MAIL "From: \"$FORM{'name'}\" <$FORM{'email'}>\n";
print MAIL "Subject: Someone added to the story!\n\n";
print MAIL "Hello. This is just to let you know that someone added\n";
print MAIL "to your never ending story. They wrote:\n\n$FORM{'story'}\n";
close(MAIL);
}
&sig;

sub sig {
# Please do NOT change this sub or any place in this script where this sub
# is called
print "<center><a hr";
print "ef=\"http://\" target=\"new\">";
print "</a>, <a href=\"\" ta";
print "rget=\"new\"></a>, ";
print " <a href=\"\" ";
print "arget=\"new\"></a><";
print "</center></body></html>\n";
exit;
}

Cssons avatarCssonMedlem sedan feb. 2000438 inlägg
#2

Lite otestad kod:

my @censur = ('bengt', 'kalle', 'knut');

for(0..$#censur)  {
    $FORM{'story'} =~ s!\b$censur[$_]\b!Sven!ig;
}

Bör ersätta alla förekomster av Bengt, Kalle och Knut med Sven. Placeras troligen bäst före raden open(FILE,"$path");

/Csson

------------------
Erimax.com
Cykelsemester

[Redigerat av Csson den 26 mar 2001]

GimboMedlem sedan dec. 20001 626 inlägg
#3

det fungerar inte, jag får en interner server error när jag lägger in den kod snutten du gav mig

GimboMedlem sedan dec. 20001 626 inlägg
#4

jag menar namnet blir inte censurerat jag får inte internal server error utan namnet blir inte censurerat helt enkelt, e tacksom för hjälp :-)

Cssons avatarCssonMedlem sedan feb. 2000438 inlägg
#5

Det var nog jag som stirrade mig lite blind på att det var namn som skulle censureras, så det blev $FORM{'name'} som censurerades... Redigerade inlägget ovan, så nu bör det censurera rätt formulärfält :).

/Csson

------------------
Erimax.com
Cykelsemester

GimboMedlem sedan dec. 20001 626 inlägg
#6

Vad menar du?? kan du vara snäll o skriva kod snutten som jag ska lägga in i koden o vart jag ska lägga den.

Det är namn som ska censureras, det skulle vara bra om även ord kunde censureras.

Cssons avatarCssonMedlem sedan feb. 2000438 inlägg
#7

Jag rättade mitt ursprungliga inlägg, så den koden borde fungera:

my @censur = ('bengt', 'kalle', 'knut');
for(0..$#censur)  {
    $FORM{'story'} =~ s!\b$censur[$_]\b!Sven!ig;
}

Det är namn du vill censurera, men inte i formulärfältet "name", utan i "story".

/Csson

------------------
Erimax.com
Cykelsemester

GimboMedlem sedan dec. 20001 626 inlägg
#8

Det fungerar fortfarande inte, vart ska jag klistra in kod snutten du gav mig??

du kanske har tröttnat på mig men detta e viktigt, so pleas help ;-)

GimboMedlem sedan dec. 20001 626 inlägg
#9

Jag skämta det fungera tack så mycket för all hjälp :-)

140 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)