За последние 24 часа нас посетили 62713 программистов и 1769 роботов. Сейчас ищут 870 программистов ...

Замена слова на другое

Тема в разделе "PHP для новичков", создана пользователем Howl, 22 мар 2010.

  1. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    Возможно ли в PHP сделать замену слов? например, если скрипт нашел "слово_1", то заменяет его на "слово_2", но не в базах, а чтобы это все выполнял PHP скрипт при загрузке страницы (на сессии пользователя), т.е. чтобы у меня была возможность увидеть оригинал сообщения в базе (для дальнейшего разбирательства)... Достали маты просто :evil:

    P.S. да, и, было бы лучше, если можно было составить отдельный файл (например .txt) и там держать список матов и их заменителей
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Да, возможно.
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Можно. Если без излишеств - написать функцию простенькую, натолкать в массив матов, перед выводом сообщения "на лету" заменять слова, если же такие встретятся. А то что в базе будет нетронутым.
    Если с излишествами - то делать чтото универсальное, где будет учитываться склонение слов типа "лось" и "лося", умный разбор если матерное слово разделяют какимто знаком "ло-сь", ну и прочее. Главное - фантазия и учебник по php))
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а ещё шумахер и застрахуйте :)

    Howl
    нарвётесь на различные способы обхода фильтра, глупое занатие, имхо
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Luge
    :))
    Да уж.. хочешь сей, а хочешь куй, всеравно регулярка не будет идеальной :))
    Кстати, занятие наполовину глупое, все таки лучше малоэффективный результат чем бездействие.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Luge
    Я повидал многое, особенно на woweb.ru.
    Там есть гостевые .. если не говорить о гостевой автора "курочка" (я ссал кипятком), то видел разные варианты.
    Например, обход слова фиг => йух.
    Дак вот, strrev делал автор))
     
  7. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    а как это можно сделать? я натыкаюсь на примеры с уже готовой строчкой, где и изменяются слова, но мне это не подходит, т.к. нужно искать слова во всем тексте на загружаемой странице...

    PHP:
    1. <?php
    2. $replace = array(
    3. 'dog' => 'cat',
    4. 'apple' => 'orange'
    5. 'chevy' => 'ford'
    6. );
    7.  
    8. $string = 'I like to eat an apple with my dog in my chevy';
    9.  
    10. echo str_replace_assoc($replace,$string);
    11. ?>
    вот по такому принципу было-бы удачнее... в массиве указывать мат и его заменитель, но как реализовать поиск по всей странице и заменять на лету - не пойму
     
  8. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Howl
    А для чего тебе на всей странице? гости что у тебя сайтом рулят? ))))
    Есть там, например, два-три поля, где каждый чтото вписывает. Логин, текст и еще чтото. Вот то и менять нужно. А юзать одну и ту же функцию замены както по-индуски.
     
  9. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    это уже их проблемы, т.к. "йух" впринципе уже набор символов, а не мат) да и вообще, йух потом тоже можно будет заменить, если злостно к этому относиться))
     
  10. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    Апельсин
    да нет... у меня форум, да и друг порой маты пропускает в новость)

    вот на форуме для пользователей пусть заменители будут, а я потом уже отдельно с автором поста разговаривать буду...
     
  11. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Howl
    аааа))))))) Еще скажи что и сам иногда бывает материшься на сайте))))
    Ну вот, даже форум, например, такой вот как тут - фильтруй поле самого сообщения, ника и подписи (если есть). Остальные по желанию - всякие контакты и "о себе". Считай что форум у тебя "отфильтрован". Эту же функцию применяй и к тексту, где у тебя новость выводится. Если у друга матерное недержание то фильтруй еще и названия статей, описание и пр. Это не трудно на самом деле.
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    На лету? это при добавлении?
    Или при выводе страницы?

    Если второе. то в мануал за ob_start, ob_get_clean
     
  13. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    неее... в момент отправки сообщения фильтровать слова - не вариант, как было написано выше, напишут "йух" к примеру в следующий раз, вот чтобы этого мусора бессмысленного не было я отдельно разговариваю с пользователем, который допустил маты в сообщении, а если еще и зацепятся слово за слово какие-нибудь неадекваты, что делать там? представь что за зеркалье там будет твориться, если маты запрещены...))
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну, во-первых, str_ireplace (str_replace) спокойно могут принимать массивы в качестве аргументов.
    Правда не в таком виде, но всё-таки.
     
  15. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    Simpliest
    а со скриптом как быть? всю страницу в переменную $string запаковать? я просто другого выхода не вижу по примеру, который находится выше)
     
  16. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    strtr() переименовали? :)
     
  17. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А она работает в регистронезависимом режиме, ммм? =)
     
  18. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Howl
    Раз уже так прижало всю страницу "цензуре отдать", то можешь через ob_start, как тебе уже предложили. Хотя я такое не приветствую.
     
  19. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    мат, блин, неотъемлемая часть программирования и технологии клиент-заказчик.
    хуля тут целок строить?
     
  20. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    с ob_start здорово вышло, работает)
    и еще вопрос: как можно указать массив в str_replace?

    делаю:
    PHP:
    1. <?php
    2. $arr = array(
    3. "Слово 1" => "Слово 2",
    4. "Слово 3" => "Слово 4",
    5. );
    6.  
    7.   return (str_replace($arr, $anti_mat));
    8. ?>
    не выходит, пустую страницу показывает, а сделаю так:

    PHP:
    1. return (str_replace("Слово 1", "Слово 2", $anti_mat));
    все нормально, а нужен массив, бл... =)
     
  21. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    разве есть какой-то риск? если через ob_start фильтровать слова?
     
  22. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Howl
    А если без ключей -$arr = array("Слово 2", "Слово 3", "Слово 4");
    и заменять это на одно определенное слово "ВЫРЕЗАНО" ? А блин? ))
     
  23. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Не в риске дело, оно просто не предназначено чтоб быстро работать :))
     
  24. Howl

    Howl Активный пользователь

    С нами с:
    16 фев 2010
    Сообщения:
    90
    Симпатии:
    0
    нене, здесь и кроется ключ... заменяются слова на случайное из другого файла, положительные эмоции, автору поста с матами придется отредактировать сообщение или стать объектом насмешки чей-то) клин клином вышибают)
     
  25. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Howl
    Ну если это случайное, то зачем вписывать в массив пару Слово1 - Замена1, надо рандом какойто соорудить, иначе слово "куй" будет всегда заменяться одним и тем же. И тогда уже будет не смешно)