Нет, я не стал чистить посты и комменты на предмет разных трех- (и более) буквенных слов, ибо такое решение, во-первых, противоречит духу данного веб-проекта, а во-вторых мне тупо лень заниматься чем-то подобным :) Вместо этого я поступил как любой нормальный уважающий себя кодер - сел и накодил фишечку :) Теперь женщины, дети и модераторы уважаемых бирж вечных ссылок, по идее, не должны увидеть ни одного неприличного слова, не изъявив специально такого желания.
1. Как работает
Перед выводом в браузер html-код страницы прогоняется через специальный парсер, умеющией отличать приличные слова от неприличных (ну, настолько точно, насколько это позволяет сделать убогий словарик из нескольких сотен регулярок). Неуместные слова при этом заключаются в <span> со специальным классом.
2. Магия на клиенте
Собственно, никакой особой магии. Сначала для таких слов накладывается CSS-правило, делающее слово нечитаемым (красный текст на красном фоне). Это для тех, у кого JavaScript не работает.
Далее, в бой вступает JS - он находит все неприличные слова, подсвечивает их, чтоб читались, проверяет режим цензуры - если цензура включена, показывает "зазвезженный" вариант, если выключена - слово "как есть". Добавляет обработчик клика - по клику пользователю предлагается показать/скрыть бранные слова. Если на странице обнаружены такие слова, добавляет дисклаймер в шапку.
3. Почему на клиенте?
Почему бы не передавать в браузер сразу цензурную версию страницы? Во-первых, потому что я хочу, чтоб поисковики видели сайт "как есть". Во-вторых, я хочу чтоб переключение режима происходило без перезагрузки страницы, ибо так труъшнее и круче.
4. Какие есть недостатки?
Основной недостаток - "агрессивность" словаря, которому неприличные слова мерещатся везде, где только можно. Например, первым делом он счел опасной для слуха женщин и детей фамилию "Пошибалов" :) И даже в общем-то употребительные выражения типа "карта хорватии" до доработки фильтра напильником постить было нельзя - в слове "Хорватия" ему мерещилось Бог знает что :) Немного попыхтев и прогнав через фильтр весь контент бложика, я это дело несколько исправил. Ну и вообще, ложные срабатывания доставляют некоторое количество лулзов, так что пусть будут.
5. Какие перспективы?
Ну, кодил я эту штуку конечно не только для бложека - на один проект давно просили поставить фильтр мата. Тут я его обкатываю. Качество для "боевого" использования ИМХО пока слабовато. Надеюсь, когда-нибудь дойдут руки погонять фильтр на больших текстовых коллекциях, это добавит словарю адекватности. Собственно, весь мат словообразуется вокруг десятка корней, поймать их не трудно. Основная задача - составить нормальный словарь исключений. Нашлось бы время :)
Ну или можете просто посмотреть пост про то, как я заебашил лук :)