04. august 2009 - 16:18Der 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 }
$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; } }
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; }
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)
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 :)
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)
- og blæse værd med points. Jeg blandede mig, vel vidende, tråden var lukket med et accepteret svar ;o)
Synes godt om
Ny brugerNybegynder
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.