Возможно ли в PHP сделать замену слов? например, если скрипт нашел "слово_1", то заменяет его на "слово_2", но не в базах, а чтобы это все выполнял PHP скрипт при загрузке страницы (на сессии пользователя), т.е. чтобы у меня была возможность увидеть оригинал сообщения в базе (для дальнейшего разбирательства)... Достали маты просто :evil: P.S. да, и, было бы лучше, если можно было составить отдельный файл (например .txt) и там держать список матов и их заменителей
Можно. Если без излишеств - написать функцию простенькую, натолкать в массив матов, перед выводом сообщения "на лету" заменять слова, если же такие встретятся. А то что в базе будет нетронутым. Если с излишествами - то делать чтото универсальное, где будет учитываться склонение слов типа "лось" и "лося", умный разбор если матерное слово разделяют какимто знаком "ло-сь", ну и прочее. Главное - фантазия и учебник по php))
Luge ) Да уж.. хочешь сей, а хочешь куй, всеравно регулярка не будет идеальной ) Кстати, занятие наполовину глупое, все таки лучше малоэффективный результат чем бездействие.
Luge Я повидал многое, особенно на woweb.ru. Там есть гостевые .. если не говорить о гостевой автора "курочка" (я ссал кипятком), то видел разные варианты. Например, обход слова фиг => йух. Дак вот, strrev делал автор))
а как это можно сделать? я натыкаюсь на примеры с уже готовой строчкой, где и изменяются слова, но мне это не подходит, т.к. нужно искать слова во всем тексте на загружаемой странице... PHP: <?php $replace = array( 'dog' => 'cat', 'apple' => 'orange' 'chevy' => 'ford' ); $string = 'I like to eat an apple with my dog in my chevy'; echo str_replace_assoc($replace,$string); ?> вот по такому принципу было-бы удачнее... в массиве указывать мат и его заменитель, но как реализовать поиск по всей странице и заменять на лету - не пойму
Howl А для чего тебе на всей странице? гости что у тебя сайтом рулят? )))) Есть там, например, два-три поля, где каждый чтото вписывает. Логин, текст и еще чтото. Вот то и менять нужно. А юзать одну и ту же функцию замены както по-индуски.
это уже их проблемы, т.к. "йух" впринципе уже набор символов, а не мат) да и вообще, йух потом тоже можно будет заменить, если злостно к этому относиться))
Апельсин да нет... у меня форум, да и друг порой маты пропускает в новость) вот на форуме для пользователей пусть заменители будут, а я потом уже отдельно с автором поста разговаривать буду...
Howl аааа))))))) Еще скажи что и сам иногда бывает материшься на сайте)))) Ну вот, даже форум, например, такой вот как тут - фильтруй поле самого сообщения, ника и подписи (если есть). Остальные по желанию - всякие контакты и "о себе". Считай что форум у тебя "отфильтрован". Эту же функцию применяй и к тексту, где у тебя новость выводится. Если у друга матерное недержание то фильтруй еще и названия статей, описание и пр. Это не трудно на самом деле.
На лету? это при добавлении? Или при выводе страницы? Если второе. то в мануал за ob_start, ob_get_clean
неее... в момент отправки сообщения фильтровать слова - не вариант, как было написано выше, напишут "йух" к примеру в следующий раз, вот чтобы этого мусора бессмысленного не было я отдельно разговариваю с пользователем, который допустил маты в сообщении, а если еще и зацепятся слово за слово какие-нибудь неадекваты, что делать там? представь что за зеркалье там будет твориться, если маты запрещены...))
Ну, во-первых, str_ireplace (str_replace) спокойно могут принимать массивы в качестве аргументов. Правда не в таком виде, но всё-таки.
Simpliest а со скриптом как быть? всю страницу в переменную $string запаковать? я просто другого выхода не вижу по примеру, который находится выше)
Howl Раз уже так прижало всю страницу "цензуре отдать", то можешь через ob_start, как тебе уже предложили. Хотя я такое не приветствую.
с ob_start здорово вышло, работает) и еще вопрос: как можно указать массив в str_replace? делаю: PHP: <?php $arr = array( "Слово 1" => "Слово 2", "Слово 3" => "Слово 4", ); return (str_replace($arr, $anti_mat)); ?> не выходит, пустую страницу показывает, а сделаю так: PHP: return (str_replace("Слово 1", "Слово 2", $anti_mat)); все нормально, а нужен массив, бл... =)
Howl А если без ключей -$arr = array("Слово 2", "Слово 3", "Слово 4"); и заменять это на одно определенное слово "ВЫРЕЗАНО" ? А блин? ))
нене, здесь и кроется ключ... заменяются слова на случайное из другого файла, положительные эмоции, автору поста с матами придется отредактировать сообщение или стать объектом насмешки чей-то) клин клином вышибают)
Howl Ну если это случайное, то зачем вписывать в массив пару Слово1 - Замена1, надо рандом какойто соорудить, иначе слово "куй" будет всегда заменяться одним и тем же. И тогда уже будет не смешно)