Avatar billede mac10 Nybegynder
18. februar 2008 - 22:12 Der er 7 kommentarer og
1 løsning

$seek er lig med '%bandeord%'

Hej allesammen.

Jeg har lavet en søgefunktion, hvor søgeordene ender i min database. Jeg vil gerne udelukke sætninger med bandeord som "fuck" og lign.

Jeg har prøvet med:

if(($seek == "fuck") || $soeg == "fukc" || $soeg == "fukc") {
osv.

Det virker jo fint med blot ord. Hvis man ellers skriver "fuck dig" så sætter den det ind. Hvordan kan jeg gøre så at den kigger i hele sætningen for bandeord?

Har prøvet med:
if(($seek == "%fuck%") || $soeg == "%fukc%" || $soeg == "%fukc%") {

Men det virker ikke. Hvordan er det muligt at lave denne kode?

På forhånd tak
Avatar billede pidgeot Nybegynder
18. februar 2008 - 22:22 #1
Der er en del ting du kan gøre:

1)Du kan strikke noget regex sammen for at checke om noget findes med preg_match (omring ordet med \b, så du ikke fanger når den bogstav kombination er en del af et helt legitimt ord)
2)Du kan splitte op pr. ord, og så checke om de "forbudte" ord findes (explode og in_array var mulige startpunkter).
3)Du kan bruge strstr/stristr for at se om en bestemt ting optræder i hele din streng, men så fanger du også når der er tale om en del af et ord der lige er i din ordliste - hvis du eks. filtrerer "pis", så ville den også fange ordet "spise" (man kan godt eks. sætte mellemrum på begge sider, men der er andre tegn der kan "afbryde" et ord end lige mellemrum, og det er ikke til at filtrere på det hele).
Avatar billede mac10 Nybegynder
18. februar 2008 - 22:26 #2
Tak for forklaringen pidgeot. Du har en pointe med det med pis og spise. Men det forhindre man jo hvis man kun afviser dem med mellemrum. Jeg er ikke ekspert i PHP, kender det basale, men explode og in_array funktionerne er ikke i min PHP ordbog endnu.

Er det muligt for dig at lave et lille kode eksempel jeg kan tage udgangspunkt i? Ville jeg sætte stor pris på.
Avatar billede olebole Juniormester
18. februar 2008 - 22:49 #3
<ole>

Hvis ikke du vil have bandeord i din database, kan du ikke lægge den tilgængelig på nettet. Du kan aldrig undgå bandeord ... blot undgå nogle få. Hvis man vil skrive noget 'grimt', kan man meget let gøre det - uanset, hvad du gør  ;o)

/mvh
</bole>
Avatar billede pidgeot Nybegynder
18. februar 2008 - 23:01 #4
Problemet med kun at bruge mellemrum, er at du ikke fanger det der er allerførst og sidst - med mindre du sætter mellemrum i begge ender først - men du tager heller ikke højde for eks. linjeskift og andre word boundaries.

Nu fremgår det ikke af dit spørgsmål om du virkelig hardcoder det hele, eller om du bruger en database - men hvis vi går ud fra det er hardcoded:

<?PHP
$badwords = array("fuck","fukc","fsck"); //Lav et array med de forbudte ord
$denytext = false; // Lav en variabel der holder styr på om vi skal afvise det - gå ud fra det er i orden
foreach($badwords as $badword) //løb igennem alle de forbudte ord
{
  //se om $text indeholder det forbudte ord - vi bruger \b for at sikre vi får hele ordet, og det sidste i bruges til at være ligeglad med store/små bogstaver
  //|= gør at $denytext bliver sat til true hvis der på et eller anden tidspunkt bliver fundet et match - uanset om alt det andet ikke matcher
  $denytext |= preg_match("/\b" . $badword . "\b/i",$text)!=0;
}
//hvis $denytext==true, indeholdte teksten noget forbudt

I øvrigt er manualen på php.net din ven når du skal finde ud af hvad en funktion gør.

(Og ja, Ole har fuldstændig ret - der vil altid være en kreativ sjæl der finder en måde uden om dit system :-) )
Avatar billede mac10 Nybegynder
18. februar 2008 - 23:01 #5
Ja det er rigtig nok, men man kan jo selv vælge man ikke vil have de værste af slagsen med.

"Det er ikke sikkert vi kan stoppe fjenden, men vi kan holde dem tilbage, hvis bare vi prøver" :)
Avatar billede olebole Juniormester
19. februar 2008 - 20:04 #6
To gange nej  :)
Avatar billede mac10 Nybegynder
10. november 2010 - 12:39 #7
Lav svar tak
Avatar billede mac10 Nybegynder
08. december 2010 - 10:49 #8
luk
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