 |
|
The Jackal
Paranoid (IV) Inmate
From: The Dark Side of the Moon Insane since: Jun 2000
|
posted 01-05-2003 09:39
Hey there. I have a quiz generator on a site for a client and I need some help. The Quiz generator is Quirex (found at http://www.teca-scripts.com/free/quirex.php). The problem is that some people have been using foul language when they enter thier name in the form. Is there any way I can add a mini filter to prevent certain words from being used in the form? The line of code that inserts the 'Name' section of the form reads as follows:
print "Name: <input type=text name=name size=20 maxlength=40> ";
Any help would be great. Thanks.
|
Tyberius Prime
Paranoid (IV) Mad Scientist with Finglongers
From: Germany Insane since: Sep 2001
|
posted 01-05-2003 12:34
you're using php, right?
Well, there are two options: you either overwrite the foul words with something along the lines of #@#@, or you deny using them (in that case you'd have to die() the page, present a nice error message and the like).
Anyhow, here's the code for replacing for certain words
code:
$words = array(
"evil word", //obviously replace this with the words you want to detect
"foul word",
);
//asuming your text is called $text
$text = preg_replace($words,'@#$)',$text);
Hoping to have helped,
Tyberius Prime
|
The Jackal
Paranoid (IV) Inmate
From: The Dark Side of the Moon Insane since: Jun 2000
|
posted 01-06-2003 04:47
It is actually a CGI script. It calls on a file called 'showquiz.pl' to give the form to where you enter your name. Exactly how do I add this code to the form? I tried a couple ways, but I keep getting a 500 error. What am I doing wrong? I tried it like this:
print "Name: <input type=text name=name size=20 maxlength=40>
$words = array( "evil word", //obviously replace this with the words you want to detect"foul word",);
//asuming your text is called $text
$text = preg_replace($words,'@#$)',$text)";
The original looked like this:
print "<tr bgcolor=$table{'color1'}><td colspan=4><font$font_para size=2>\n";
print "Name: <input type=text name=name size=20 maxlength=40> ";
print "E-mail:<input type=text name=email size=20> <i>(both required)</i><br>";
print "Check here if you want to hide your email address: <input type=\"checkbox\" name=\"hide\">";
print "</font></td></tr>\n";
Thanks.
|
Petskull
Maniac (V) Mad Scientist
From: 127 Halcyon Road, Marenia, Atlantis Insane since: Aug 2000
|
posted 01-06-2003 04:58
wouldn't this:
$words = array( "evil word", //obviously replace this with the words you want to detect"foul word",);
fuck up the whole thing by commenting out ,);?
Code - CGI - links - DHTML - Javascript - Perl - programming - Magic - http://www.twistedport.com
ICQ: 67751342
|
Tyberius Prime
Paranoid (IV) Mad Scientist with Finglongers
From: Germany Insane since: Sep 2001
|
posted 01-06-2003 18:49
well, it shouldn't, petskull. after all, it only comments out the rest of the line, and there's a linebreak afterwards.
I assume the problem lays more in the fact that it's a php script, which you're trying to paste into a perl script.
Sorry, I can't help you with perl, I don't know enough about it, but petskull is the local perl guru around here...
|
The Jackal
Paranoid (IV) Inmate
From: The Dark Side of the Moon Insane since: Jun 2000
|
posted 01-06-2003 20:07
|
bitdamaged
Maniac (V) Mad Scientist
From: 100101010011 <-- right about here Insane since: Mar 2000
|
posted 01-06-2003 20:39
I'm looking at this script and totally lost on where you want to do this.
But try replacing this:
<BLOCKQUOTE><FONT face="Verdana, Arial">code:</font><HR><pre>
foreach $line (@lines) {
my ($dbname, $name, $desc, $level) = split(/\
|
Piper
Paranoid (IV) Inmate
From: California Insane since: Jun 2000
|
posted 01-06-2003 21:31
I haven't had a chance to look at the code yet but it should just be a simple substitution. Something like this will work:
code:
my $text = 'This is a test of bad word substitution. Let\'s see if the bloody thing works!';
my %bad = (
bad => 'good',
bloody => 'damn',
);
$text =~ s/(\w+)/ exists $bad{$1} ? $bad{$1} : $1 /oesg;
Just store your bad words in a hash. I'll take a look at the code when I get home and see if I can put it in context for you.
Regards,
Charlie
[edit]doh, bitdamaged beat me to it.[/edit]
[This message has been edited by Piper (edited 01-06-2003).]
|
bitdamaged
Maniac (V) Mad Scientist
From: 100101010011 <-- right about here Insane since: Mar 2000
|
posted 01-06-2003 21:35
dammit I knew it could be done in one line. I'm always learning with perl
.:[ Never resist a perfect moment ]:.
|
Piper
Paranoid (IV) Inmate
From: California Insane since: Jun 2000
|
posted 01-06-2003 21:44
quote: I'm always learning with perl
Isn't that the truth!
That bit of code is something I found when I was making a generic template parser. It has turned out to be quite versatile.
~Charlie
|
Piper
Paranoid (IV) Inmate
From: California Insane since: Jun 2000
|
posted 01-07-2003 05:13
I'm lost looking at that code too. The only place I can see to filter bad names is around the line 130 area of showquiz.pl:
Original Code
<BLOCKQUOTE><FONT face="Verdana, Arial">code:</font><HR><pre>
if (param('name') eq ""
|
The Jackal
Paranoid (IV) Inmate
From: The Dark Side of the Moon Insane since: Jun 2000
|
posted 01-08-2003 21:23
Thanks for the help Piper. I added the code as you suggested and I did get an error. The error log told me this:
syntax error at ./showquiz.pl line 131, near "
|
bitdamaged
Maniac (V) Mad Scientist
From: 100101010011 <-- right about here Insane since: Mar 2000
|
posted 01-09-2003 00:25
yep first UBB (this forum) put's a space between two "pipes" (
|
Piper
Paranoid (IV) Inmate
From: California Insane since: Jun 2000
|
posted 01-09-2003 02:22
Thanks, bitdamaged. I did not notice that when I lookd over the code.
The Jackal: I did test that regex and it works. It's a bit overkill for single word names but it will catch multi word names which I think you probably want. I just hope the code is in the right spot to filter the name.
~Charlie
|
bitdamaged
Maniac (V) Mad Scientist
From: 100101010011 <-- right about here Insane since: Mar 2000
|
posted 01-09-2003 04:06
Yeah that's one of those things you'll miss, it just comes up in this forum everytime someone uses an or operator
.:[ Never resist a perfect moment ]:.
|
Petskull
Maniac (V) Mad Scientist
From: 127 Halcyon Road, Marenia, Atlantis Insane since: Aug 2000
|
posted 01-09-2003 05:05
damn.. looks like I'm late!
What's the question again?
Code - CGI - links - DHTML - Javascript - Perl - programming - Magic - http://www.twistedport.com
ICQ: 67751342
|
The Jackal
Paranoid (IV) Inmate
From: The Dark Side of the Moon Insane since: Jun 2000
|
posted 01-12-2003 09:16
Mega Kudos to Piper and Bit! The new addition works wonderfully! I will name my first born after you!
|
Piper
Paranoid (IV) Inmate
From: California Insane since: Jun 2000
|
posted 01-12-2003 17:19
Awesome, I'm glad that worked for you.
~Charlie
|