Store Bad Word List in een array
Lees de " slecht woord " lijst van schijf en bewaar deze op een datastructuur . Je zou kunnen overwegen om een array en opslaan van elk ' slecht woord " als een element van de array , zoals :
$ bad_word [ 0 ] = " thisbadword " ; $ bad_word [ 1 ] = " thatbadword " ,,
Hoewel dit soort structuur zal werken , het is inefficiënt , want je moet de hele array van " slechte woorden " voor elk woord dat je tegen de lijst te controleren doorzoeken . Voor een meer haalbare manier van het vervullen van deze taak , maak een hash table . Ontwerp een associatieve array en opslaan elke " slecht woord " als de array key . Iets toe te wijzen als de waarde , zoals " 1 " of " true . " Om te bepalen of een woord in de lijst staat , hoeft u alleen maar te verwijzen naar de array key , in plaats van zoeken het gehele array. Bijvoorbeeld :
$ bad_words = array ( ) ; $ fp = fopen ( " badwordsfile.txt " , " r" ) or die ( " Kon scheldwoorden bestand niet openen ! " ) ; Terwijl ( $ woord = fgets ( $ fp ) ) { $ bad_words [ $ woord ] = 1 ; }
Verkrijg de inhoud naar Filter
Haal de inhoud dat u wilt filteren . De inhoud zou kunnen worden door de gebruiker gemaakte opmerkingen van een HTML-formulier , een document op de harde schijf of zelfs een webpagina van het internet . Bewaar de inhoud in een enkele variabele . Bijvoorbeeld :
$ to_do = file_get_contents ( " http://badmusiclyricswithprofanity.com " ) ;
Uittreksel Woorden Van de inhoud
Break
de ongefilterde inhoud in woorden door scheiding van de woorden in de ruimtes die hen scheiden . Gebruik de functie PHP " ontploffen " om de ongefilterde snaar te zetten in een array van woorden die je kan individueel filteren . Bijvoorbeeld :
$ words_to_filter
= explode ( " " , $ to_do ) ;
filter Bad Words
Doorloop de array van woorden en laat elk woord tegen de array met de " slecht woord " lijst . Als u de array controleren door te kijken om te zien of de array waarde is een, zult u een foutmelding elke keer dat u probeert toegang te krijgen tot een woord dat niet in de lijst , omdat de array index niet bestaat genereren . Gebruik in plaats daarvan de " isset " -functie om te bepalen of het woord is in de array . Als er een match is , vervang het woord met de gekozen substitutie . Bijvoorbeeld :
foreach
( $ words_to_filter als $ woord = > $ teken ) { if ( isset ( $ bad_words [ $ woord ] ) ) { $ woord = $ vervanger ; } }
Monteer de tekst
Zet de tekst terug in een enkele variabele met de " imploderen " -functie - " . exploderen " het tegenovergestelde van het kost elke array waarde en doe het met tekens u aanwijzen , in ons geval , het is een ruimte. Echo van de resultaten van de gefilterde inhoud op het scherm. Bijvoorbeeld : ?
$ Gefilterd = implode ( " " , $ words_to_filter ) ; echo $ gefilterd ; >