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?
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
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).
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å.
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)
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 :-) )
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.