1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

помогите с фильтром мата

Тема в разделе "PHP программирование", создана пользователем -, 28 окт 2006.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. Гость

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

    например: написано "млять" а при дабавлении отображается "я дурак"
     
  2. Andrew Stephanoff

    Andrew Stephanoff Гость

    не выйдет -- любые фильтры мата достаточно просто обойти
     
  3. Гость

    Обход ни обход... Я не про это спрашиваю.
     
  4. Andrew Stephanoff

    Andrew Stephanoff Гость

    Код (Text):
    $text = @$_POST["text"];
    $bad_words = array();
    $bad_words[] = array(
    "search"    => "млять",
    "replaced" => "я дурак"
    );

    for ($i = sizeof($bad_words) - 1; $i >= 0; $i --) { $text = str_repace($bad_words[$i]["search"], $bad_words[$i]["replaced"], $text); }

    echo $text;
     
  5. Гость

    Спасибо! Только если можно с коментами, какая строка на что?
     
  6. Гость

    Все, что было предложено, будет медленно работать. В PHP есть встроенная функция, для таких фокусов. Если интересно - читай теорию, если нет, - листай в конец, там расписан твой случай.

    ereg_replace()
    (PHP 3, PHP 4)

    ereg_replace - замещает регулярное выражение.
    Описание
    Код (Text):
    string ereg_replace (string pattern, string replacement, string string)
    Примечание: preg_replace(), которая использует Perl-совместимый синтаксис регулярного выражения, часто работает быстрее, чем ereg_replace().

    Эта функция сканирует string для поиска совпадений с pattern, затем заменяет совпавший текст строкой replacement.

    Возвращается модифицированная строка. (Что может означать, что строка-оригинал будет возвращена, если нет заменённых совпадений.)

    Если pattern содержит подстроку в скобках, replacement может содержать подстроки вида \\digit, которые будут заменены текстом, совпавшим с digit'ной подстрокой в скобках; \\0 воспроизведёт всё содержимое строки. Может использоваться до 9 подстрок. Скобки могут вкладываться, и тогда они подсчитываются по открывающим скобкам.

    Если совпадения в string не найдены, то string вернётся без изменений.

    Например, следующий фрагмент кода печатает "This was a test" три раза:Пример 1. ereg_replace()
    Код (Text):
    $string = "This is a test";
    echo ereg_replace (" is", " was", $string);
    echo ereg_replace ("( )is", "\\1was", $string);
    echo ereg_replace ("(( )is)", "\\2was", $string);
    Единственное, что необходимо отметить - если вы используете целочисленное значение как параметр replacement, вы можете не получить ожидаемый результат. Это из-за того, что ereg_replace() будет интерпретировать число как простое значение символа и применит его. Например:Пример 2. ereg_replace()
    Код (Text):
    <?php
    /* Это не будет работать так, как ожидается. */
    $num = 4;
    $string = "This string has four words.";
    $string = ereg_replace('four', $num, $string);
    echo $string;  /* Output: 'This string has  words.' */

    /* Это будет работать. */
    $num = '4';
    $string = "This string has four words.";
    $string = ereg_replace('four', $num, $string);
    echo $string;  /* Output: 'This string has 4 words.' */
    ?>
    Пример 3. Замена URLs ссылками
    Код (Text):
     
    $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
    "<a href=\"\\0\">\\0</a>", $text);
    Теперь твой случай:
    Код (Text):
    <?PHP
    //Создаем массив, где ключ - нехорошее слово, значение хорошее
    $blacklist = array(
    'редиска'=>'нехороший человек',
    'жмурик'=>'покойник',
    'гад'=>'сам дурак'
    )
    //тут перебираем, и подставляем значения в функцию ereg_replace()
    foreach($blacklist as $key => $value)
    {
    $string=ereg_replace ($key,$value, $string);
    }
    Echo $string; //На выходе выводим и получаем чистую строку
    ?>
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей