Фильтр ошибок в PHP?

Я пишу фильтр в Word.

У меня есть список badwords в массиве, и метод cleanse_text () написан следующим образом:

public static function cleanse_text($originalstring){ if (!self::$is_sorted) self::doSort(); return str_ireplace(self::$badwords, '****', $originalstring); } 

Это работает тривиально, для точных совпадений, но я хотел также подвергать цензуре слова, которые были замаскированы под «ab * d», где «abcd» – это плохая фраза. Это оказывается немного сложнее.

Вот мои вопросы:

  1. Является ли фильтр с флагом, который стоит потрудиться (это сайт для профессионалов, поэтому требуется минимальная степень приличия – я бы подумал)

  2. Стоит ли суетиться, пытаясь захватить очевидную работу, например «f * ck», или не пытаться отфильтровывать их.

  3. Есть ли лучший способ написать метод cleanse_text () выше?

Я определенно не потрудился бы с этим.

  1. Это сайт для профессионалов, поэтому вы можете предположить, что они будут действовать соответствующим образом. Некоторая умеренность и соблюдение правил приведут всех в порядок. Например, посмотрите на переполнение стека. Даже без инструментов модерации сообщества люди могут быть вынуждены вести себя надлежащим образом.

  2. Это потерпит неудачу. Было бы слишком много ложных срабатываний («clbuttic»), и составить список, содержащий все возможные ругательные слова, было бы невозможно поддерживать. Замена некоторых букв (например, f*ck ) делает его не менее оскорбительным. Удаление слова полностью разрушает смысл, что является огромной проблемой с ложными срабатываниями.

  3. Рассмотрим дискуссию о ослах и птицах. Все дело в ослах, сиськах, олухах и петухах.

Если это сайт для профессионалов, то не беспокойтесь. Во-первых, вы не увидите много проклятий, и когда вы это сделаете, скорее всего, это будет комедийный эффект или что-то подобное. Люди, которые много ругаются в незрелой усадьбе, будут наказаны, просто произведя плохое впечатление на всех. (И тех, кто полностью переусердствует, все равно должны заниматься модераторы, так что это не должно быть проблемой.)

Что происходит, когда вы пытаетесь внедрить фильтр плохих слов, вы в конечном итоге подвергаете цензуре полностью доброкачественное использование ругательных слов, и во многих случаях вы также подвергаете цензуре слова, которые не являются ругательными словами, но достаточно похожи для фильтрации. (Это называется проблемой Scunthorpe , так как @deceze упоминается в комментариях.) Кроме того, если вы не сделаете тотализатор, будет очень легко обойти. В целом я бы сказал, что это не стоит усилий.

Возьмем Stack Overflow в качестве примера. У него нет фильтра плохих слов, и все идет отлично – я не слышал о каких-либо проблемах с такими вещами.

Хорошо, вот другая идея:

Я не знаю, какой контент вы фильтруете, но я просто предполагаю, что это система комментариев, так как это все равно будет применяться ко всему, что может быть.

Вероятно, у вас есть какой-то административный интерфейс. Что, если каждый раз, когда кто-то включает возможное «плохое слово» в комментарии, он оставляет заметку для вас в указанном интерфейсе. Или отправляет вам ежедневное электронное письмо по всей возможной профанации, появившейся на вашем сайте. Рядом с каждым списком могут быть ссылки, которые при нажатии будут автоматически применять фильтр к этому комментарию / сообщению / независимо, или удалить его или что угодно. Затем вы можете просто взглянуть на отчет, щелкнуть один или два раза, чтобы очистить сайт, и покончить с ним.

Вы могли бы подумать, что это не будет масштабироваться. Вероятно, это не так. Но если ваш сайт не получает тонны трафика, вы можете даже не получать отчет каждый день. Или каждую неделю. Возможно, вам вообще не придется вмешиваться. Никаких списков, никаких размышлений о каждом возможном нежелательном слове и всех возможных вариантах написания, никаких ложных срабатываний.

Это может сработать.

Все равно 8u11 $ # 1 +. Просто опубликуйте общепринятое для человека правило, пусть люди отмечают оскорбительные вклады и запрещают преступников.

Существует так много случаев, когда вы захотите реализовать эту функциональность. Будет ли он когда-либо 100% правильным / безопасным / отказоустойчивым? Конечно, нет, но скажите мне, что это такое!

Если вы объедините запрос OPs (который автоматически устанавливает флажок post / user-input) с функцией «сообщить об этом» для общего пользователя, у вас действительно сильная система. Большинство крупных корпораций и бизнес-структур используют эту систему «удвоения», которая объединяет «обзоры сотрудников администраторов» с входами с автоматическим флагом и способность обычного пользователя сообщать обо всем, что проскользнуло под радаром.

 function spam_found($full_string){ $spam = array('100%', '100 %', '110%', '110 %', 'free'); $i = 0; foreach ($spam as $spamword) { if (strrpos($full_string, $spamword)) { $i++; } } if($i > 0){ return true; }else{ return false; } } 

Это просто базовая функция «шаблон», которую мы используем в моей компании (используется в среде MVC, на самом деле это вспомогательная функция, называемая контроллером, у нас есть много таких функций в зависимости от типа ввода). Это можно легко адаптировать к целому ряду ситуаций, например, вернуть true только в том случае, если найдено 3 ваших спам-слова.

Например, в Австралии, если вы рекламируете работу, запрещается указывать, что она предназначена только для определенного пола. Правильно, если вы ищете девушку для работы в стриптиз-клубе, вам не разрешают говорить «только для девочек». Если на сайте обнаружена такая реклама (например, на Facebook), веб-сайт (а не рекламодатель / лицо, разместившее объявление) не несет ответственности за любые возможные уголовные или гражданские обвинения / судебные процессы.

В вышеупомянутом случае для Facebook было бы целесообразно сделать «проверку спама» для любых рекламных объявлений в Австралии, в которых упоминались слова «мужчина, женщина, парни, девушки и т. Д.».