Avatar billede cronaldo Nybegynder
04. august 2009 - 16:18 Der er 8 kommentarer og
1 løsning

Bandeordsscript, der blot skal returnere fejl, når den støder på ét ord.

Hej, eksperter.
Jeg sidder netop nu og roder med et bandeordsscript, der laver et array med ordene fra databasen. Dette array skal så sammenlignes med teksten.. Hvis denne køres igennem uden, der er sammenfald mellem forekomsterne fra databasen og teksten skal teksten lægges i en tabel. Hvis der derimod stødes på et ord skal alt stoppes derefter og den skal returnere en fejl ala:
'Fejl! Du har skrevet ordet "'.$var_til_ord.'", som er ulovligt! Prøv igen!'

Scriptet er som følger:
-----------------------
$str = explode(" ", $tekst2);
$count = count($str);

$words = array();
$foresp = mysql_query("SELECT ord FROM bannedwords ORDER BY id ASC");
while($data = mysql_fetch_array($foresp)){
    array_push($words, $data[ord]);
}
$i = 0;
for ( ; $i<=$count; ){
foreach ($words as $badwords){
    if ($str[$i] == $badwords){
        echo 'Du har skrevet ordet "'.$badwords.'" hvilket er angivet som et ulovligt ord!';
        break;   
    } else {
        $i = $i+1;
    }
}
}
if($i == $count){
// INSERT IN TABLE   
}
Avatar billede cronaldo Nybegynder
04. august 2009 - 16:42 #1
Har en opdatering...
Følgende script virker, men men men,  jeg har en tilføjelse:

hvis man skriver fx "fuck!" eller "fuck," skal den stadig udskrive fejlen, hvordan kan dette gøres??

DET NYE SCRIPT:
---------------------------

    $str = explode(" ", $tekst2);
                                $count = count($str);

                                $words = array();
                                $foresp = mysql_query("SELECT ord FROM bannedwords ORDER BY id ASC");
                                while($data = mysql_fetch_array($foresp)){
                                    array_push($words, strtolower($data[ord]));
                                }

                                for ($i=0 ; $i<$count; ){
                                    if ( in_array(strtolower($str[$i]), $words)){
                                        echo 'Du har skrevet ordet "'.$str[$i].'" hvilket er angivet som et ulovligt ord!';
                                        break;   
                                    } else {
                                        $i = $i+1;
                                    }
                                }

if($i == $count){
// INSERT INTO TABLE
}
Avatar billede cronaldo Nybegynder
04. august 2009 - 17:21 #2
Nå, lukker .. Til andre, der har lyst til at lave det vil jeg skrive en artikel om det senere :)
Avatar billede cronaldo Nybegynder
04. august 2009 - 17:21 #3
..svar
Avatar billede j4k0b Nybegynder
04. august 2009 - 17:26 #4
Din metode med at løbe alle ord i den originale tekst igennem og for hvert ord løbe alle forbudte ord igennem er langsom og ikke særlig pæn. Måske dette kan hjælpe dig på vej:


<?php

$text = 'Dette er en tekst som skal Fucking søges gennem';
$badwords = array('fuck', 'kusse');

// match med regulart udtryk
$pattern = '/(' . implode('|', $badwords) . ')/i';
$result = preg_match($pattern, $text, $match);


if($result) { // ord fra $badwords blev fundet
    $word = $match[0];
    print $word . ' må man ikke bruge her!';
} else {
    print 'Teksten er godkendt:<br><br>';
    print $text;
}

?>
Avatar billede olebole Juniormester
04. august 2009 - 19:45 #5
<ole>

Må man skrive pik eller pikhovede? Hvis ikke, må man så anbefale en anden bruger at tage Pikasol kapsler?

Man kan også spekulere på, om man må omtale en røvers brede røv eller brune røvhul - og man kan blive ved.

Svaret på dette spørgsmål, som jo er en hyppig genganger på Eksperten, plejer at være: "Det er langtfra ligetil!". Der skal nok arbejdes en hel del med konceptet, før der er noget kode, som er en artikel værd  ;o)

/mvh
</bole>
Avatar billede cronaldo Nybegynder
04. august 2009 - 21:56 #6
Nej det skal være det identiske ord :)
Olebole - dette er sagt uden et gram ironi (!!!!!) - jeg synes sgu du giver nogle af de bedste svar herinde :) Du får mig til at tænke over tingene, og det er jeg glad for!

J4k0b med for den sags skyld - tak for koden, har lige fået gang i det, og jeg har nu lave så man fx ikke kan skrive fuck) eller (fuck) eller fuck* osv... Det eneste der mangler er fuckfuck fx ;)

Og det med røvers røv / røvhul vil jo ikke være lovligt eftersom jeg redigerer ordene i mit CMS og derfor tilføjer bandeord hen ad vejen/inden åbning :) .. :)
men "fuck" i databasen ulovliggører både "fUck", "FUCK", "fUCk" osv.
Jeg elsker strtolower() :)

Men har I en ide til hvordan jeg kan undgå fuckfuck eller fuckfuckfuck fx eller røvrøv fx :)
Avatar billede cronaldo Nybegynder
04. august 2009 - 22:06 #7
Lol jeg er en nar - jeg har accepteret svar .. Vi kører lige videre og så får i point i en anden tråd :)
My bad, drenge!
Avatar billede olebole Juniormester
06. august 2009 - 19:32 #8
Det bliver langsomt, men du kunne måske lave noget med RegExp. Du kunne bladre dine ord igennem og sætte dem ind mellem to \b - som står for word boundary. Du skal jo nemlig også uden om:
    fuck*fuck*fuck
    fuck_fuck_fuck
    fuck.fuck.fuck

- og den slags. Du skal tænke på, at dine brugere er yderst kreative. Når de finder ud af, noget er forbudt, bliver det lynhurtigt en sport at finde ud af, hvordan forbudet kan omgås  ;o)

Der findes altid mange - ofte parallelle/analoge - scenarier, end det, man lige har fokus på. Derfor er det altid en af programmørens fornemmeste opgave at tænke 'skævt'/bredt/kreativt, så han kommer rundt om de knap så indlysende muligheder for, hvad der kan opstå og/eller hvordan applikationen vil blive brugt.

Derfor tager jeg absolut dit første afsnit i #6 som en kompliment. Den slags 'skæve ikke-svar' er irriterende for nogle - men de er faktisk ment yderst konstruktivt. Tak  ;o)
Avatar billede olebole Juniormester
06. august 2009 - 19:34 #9
- og blæse værd med points. Jeg blandede mig, vel vidende, tråden var lukket med et accepteret svar  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester