Ik heb een scripte, die de slechte woorden uit de chat filtert.
Echter wil ik een hele zin gaan replacen als er meer dan 3 gefilterde woorden in zitten.
bigboss @ sorry, leuk geprobeerd, maar als je logisch nadenkt...
Je telt nu voor elke lus herhaling er +1 bij op. Ofterwijl, altijd 3 in dit geval, aangezien er 3 records in de array zitten. En een integer (getal) laat je buiten quotes ;) Toch bedankt
@ikkedikke, dat is niet (zover ik weet) wat ik zoek. Hij returned een integer, maar hij moet gewoon de str_replace uitvoeren en op een manier bijhouden of hij wel of niet gereplaced is. Mocht het volgens jouw wel met substr_count kunnen, gelieve dit nader uit te leggen.
<?PHP
$string = "hier komen een aantal worden in voor";
$string = str_replace ("homo", "*filer*", $string);
# Hier komt 'homo' niet in voor, dus is het een geldige zin.
# Er hoeft hier dus geen getal te worden bijgehouden.
$string = "homo?, dit is een voorbeeld!";
$string = str_replace ("homo", "*filter*", $string);
# Hier komt 'homo' WEL in voor, dus hij wordt gereplaced naar *filter*.
# Nu moet er dus op een manier worden gekeken of er dus daad-
# werkelijk een replace heeft plaats gevonden, en dus +1 ergens
# in wegschrijven.. Maar hoe?!
?>
Daar loop je doorheen, tel je de woorden die gereplaced worden.
Dan maak je nog een array aan voor zinnen die gereplaced moet worden.
Even die replacen.
Klaar
waarom geen preg_match gebruiken voor je zoektocht naar slechte woorden, dan kan je iets maken dat indien het woord niet exact matcht maar voldoende overeenkomsten heeft, het woord ook word vervangen. dan kan je gewoon elke keer er een match is je teller verhogen en indien bvb aan 3 doe je een break van je lus en voer je een andere replace uit voor de hele zin. Ik neem aan dat je toch iets zult moeten gebruiken om te zien waar je zin begint en waar die eindigd.
de in_array() zal geen 'mafkees' in de 'supermafkees' niet zien.. Ofterwijl hij wordt niet gefilterd. Terwijl str_replace er super*filter* van zou maken.
@JBke, ook daar geld dat een woord zoals "heellelijk" niet wordt gereplaced als "lelijk" het woord is wat niet is toegestaan..
dat bedoel ik dus als je ineens een preg_match door je zin haald voor alle woorden in je te controleren tekst heb je dat probleem dus niet. Werk je dan ineens met preg_replace dan word het woord ook ineens vervangen en als de teller aan bvb 3 zit kan je met break je lus doorbreken om dan ineens de hele zin te vervangen.
Nu even geen tijd genoeg om dit ineen te steken. opgelet preg_match is eventueel wel iets trager en zeker iets moeilijker om ineen te steken.:D zou zeggen een goede uitdaging dus.
Je kan steeds nog gaan combineren uiteraard het Idee van Rens is zeker goed daar kan je eventueel met preg_match gaan werken op de woorden zodat supermafkees toch word vervangen indien enkel mafkees in je lijst staat. Je kan uiteraard de uitdaging aannemen en alles in 1 of 2 preg_matchen te gaan schrijven met daar ineens de controle van leesteken bij.
Nrzonline, mafkees word in dat geval wel vervangen hè...
Je loopt door die array heen, en dan komt hij wel "suoermafkees" tegen, maar dat replaced hij alsnog voor "super*filter*"...
natuurlijk vervangt hij het woord echter niet helemaal. bvb. supermafkees zal bvb vervangen worden door superverboden als verboden je replace woord is uiteraard. Ik zou in elk geval deze weg verder zetten zo leer je nog iets en is zeker te doen. Grtz.
@Rens: je was me voor was het aan het intypen en plots uw antwoord hehe.:D
En dan nog, je kunt ook alles gewoon in arrays gooien zoals ik eerder al zei, en vervolgens checken met eregi.
Dan zal hij wel het hele woord replacen...
$sMessage=explode(" ","<b><font color='red'>[*too much swearing, full sentence filter*]</font></b>");
}
?>
*edit*
Ik heb hem al als 'opgelost' verklaard, maar dat is ie niet echt..
Want ik heb bijvoorbeeld 'fuck' als woord wat niet mag, en ik typ 'fucking', dan filtert hij wel het woord eruit, maar hij telt hem er niet bij op.. Hoe kan ik dit dan nu oplossen?