[PHP] Jak cenzurować wypowiedzi i brzydkie słowa na forum?
Chcesz wyeliminować niecenzuralne słowa. System cenzurowania jest bardzo przydatny i eliminuje większość nieodpowiednich słów na forum dyskusyjnym lub w innych publicznych miejscach. Bardzo łatwo można go rozbudowywać o kolejne słowa i zwroty umieszczone np. w zewnętrznym pliku.
Musisz stworzyć mini-słownik niecenzuralnych słów. Wybrane słowa możesz umieścić w tablicy, aby następnie sprawdzić wpisywany tekst i w miarę potrzeby wyeliminować je z wypowiedzi za pomocą wyrażeń regularnych. Oto gotowy kod programu:
<?
$txt="A gówniarze znowu przeklinają, shit!";
$c = array(
"g(o|ó)wn(i.*?|o.*?|)",
"shit"
);
for ($i=0; $i<count($c); $i++)
$txt = preg_replace("/(\W|^)$c[$i](\W|$)/i", " [cenzura] ",$txt);
echo $txt;
?>
W wyniku działania skryptu otrzymamy zdanie:
A [cenzura] znowu przeklinają, [cenzura]!
Przykład jest może mało estetyczny, ale tak najłatwiej pokazać, w jaki sposób radzić sobie z niecenzuralnymi słowami. Jakkolwiek by tutaj nie kombinować, nie można pozbyć się całkowicie niecenzuralnych słów. Skrypt ma jedynie za zadanie przypominać użytkownikom, że nieco się zagalopowali. Gdy będą chcieli "nabluzgać", skrypt ich nie powstrzyma - wystarczy, że zmodyfikują nieco wyrazy lub wstawią pomiędzy litery inne znaki.
Rozwiązanie sprawdza się doskonale w praktyce - po zastosowaniu skryptu pozbyłem się praktycznie całkowicie niecenzuralnych słów z wszelkich dyskusji dostępnych publicznie.
Program wykorzystuje tablicę z wyrażeniami regularnymi, które dopasowują niecenzuralne zwroty. Funkcja preg_replace() zamienia "brzydkie wyrazy" na łańcuch [cenzura], który pojawia się w ich miejsce. Warto poświęcić kilka zdań na opisanie konstrukcji wyrażeń regularnych.
Wyrażenie (\W|^) dopasowuje znaki niealfanumeryczne i początek linii, następnie dopasowywany jest niecenzuralny wyraz, a na koniec (\W|$), czyli też znaki niealfanumeryczne i koniec linii. System wyłapuje całe wyrazy, które mają przed sobą i za sobą spację lub koniec/początek linii. Dzięki temu cały wyraz zastępowany jest słowem [cenzura], a nie tylko jego niecenzuralny fragment. Wygląda to estetycznie, nawet gdy widać wiele słów [cenzura].
Warto przemyśleć budowę wyrażenia regularnego w tablicy słów niecenzuralnych. Nie musisz wypisywać kilkanaście odmian tego samego słowa. Wystarczy, że skonstruujesz zaawansowane wyrażenia pasujące do różnych wariacji tego samego słowa.
Trzeba jednak uważać, aby nie wykluczyć przez przypadek słów cenzuralnych, które mogą zawierać niechciane zwroty bo potem może dojść do sytuacji, gdzie pewna grupa ludzi zamiast się "zakochiwać" teraz się "zakofuje". Po prostu nie mogli inaczej napisać tego słowa, aby nie podpaść źle napisanemu cenzorowi.