Такая тема много где рассматривалась. Поискал готовые решения - не нашел. Решил создать тему здесь и предложить свое решение. Я придумал способ заменять плохие слова (мат) в любом модуле и на любой странице сайта. Читаем полный урок по установке скрипта на моем форуме вот тут. Надеюсь вам понадобится.
Вот собственно сам урок:
На форуме техподдержки многие просили рассказать, как можно сделать функцию антимата (замены "нехороших" слов на форуме). Я придумал способ, который позволяет заменять плохие слова на что угодно в любом нужном вам модуле: в комменатриях, на форуме, в гостевой и так далее..
Для того, чтобы плохие слова на странице были заменены, вам необходимо в самый конец html кода нужной страницы, но перед тегом
вставить скрипт:
Code
<script>
// Антимат от http://StudioAD.ru by Aleko
txt = document.body.innerHTML;
// Ниже вместо слова "мат" впишите слова или словосочетания которые хотите заменить // каждое новое слово должно отделяться от предыдущего символом | // перед и после слова пробелов быть не должно // все написанные вами слова буду заменены на [cencored]
И настроить его следуя инструкциям которые прописаны прямо в коде. При копировании данного сообщения на другие ресурсы ссылка на StudioAD.ru обязательна!
/////////////////////////////////////////////////////////// function gEBC(cl){var rn=[]; var myclass=new RegExp('\\b'+cl+'\\b');var elem=document.getElementsByTagName("*"); for (var i=0;i<elem.length;i++){var classes=elem[i].className;if(myclass.test(classes))rn.push(elem[i]);}return rn; }
Форваржу из лички верное замечание по теме от blackhawk_dark. Этот подход работает чуть менее надежно, но зато меньше напрягает читателей и вполне подходит в 99.9% всех случаев:
Quote (blackhawk_dark)
нашел в форуме тему «Антимат для любого модуля», а статуса не хватает, чтобы пост оставить. Совсем недавно по вашему форуму лазить стал.
Честно говоря, прочитав все посты, не совсем понимаю, зачем нужно «изобретать велосипед»? Зачем проверять все страницы, когда можно проверять только форму полей поста при попытке отправить сообщение. И при вхождении >0 просто не давать отправлять сообщение. Это абсолютно не будет нагружать как отдельный сайт, так и систему в общем. Ну разумеется, если в пост не запихнуть 4-ре тома «Война и мир». Опять же при должном желании скрипт можно сделать достаточно гибким как к вводимому регистру, так и к служебным символам.
Пояснение: специально для проверки всех отсылаемых данных на форуме и во всех модулях существует функция chechsubmit() , которую и надо определить. Т.е. в шаблон "форма добавления сообщения" форума в конец вставляем скрипт типа такого:
Code
<script type="text/javascript"> function checksubmit(){ var msg; msg=document.getElementById('frM27'); if(msg) msg.value=RemoveMat(msg.value); msg=document.getElementById('frM30'); if(msg) msg.value=RemoveMat(msg.value); msg=document.getElementById('message'); if(msg) msg.value=RemoveMat(msg.value); return true; } </script>
Здесь элементы с id=''frM27', 'frM30', 'message' - это поля ввода названия и описания темы и самого текста сообщения. Функцию удаления мата RemoveMat() нужно написать самим. Либо показываем предупреждение и делаем return false, тогда пост просто не отсылается.
Аналогично можно сделать для страницы добавления/редактирования материала или формы добавления комментария, только там нужно смотреть, в каких именно полях делать проверку и замену.
Потеряшка - поиск потерянных и помощь бездомным животным в Питере
Сообщение отредактировал YuriT - Вторник, 11 Авг 2009, 12:03:54
Мне кажется, весь код тут написан в стиле "Что-то знаю, это и напишу". Особенно - первый пост, где автор просто не представляет последствий изменения innerHTML тега <body>. Я недавно писал на js/jquery код для замены [img] (!в том числе в чате!), так что моё небольшое творение можно растаскивать с условием сохранения копирайта (УК РФ еще никто не отменял). Вставлять в любой глобальный блок.
Code
<script type="text/javascript"> /* * You are free to use this script in commercial projects as long as the copyright header is left intact. * Snippet taken from http://infegral.ucoz.ru/index/bbimgprotect/0-2 * Copyright (c) 2010 Infegral(a)gmail/com * RegExp (modified) http://forum.ucoz.ru/forum/38-22198-437585-16-1243362715 */ window.infegral_antimat_regexp=new RegExp('(?:(?:х|x)(?:у|y)(?:ле|лe|ли|й|я|ю|е|e|и|ё))|(?:(?:с|c)ц?(?:у|y)ч?(?:к|k|)(?:а|a|е|e|у|y|и|о|o)?)|(?:гнид(?:а|a|o|о))|(?:(?:м|m)(?:а |a|o|о)нд(?:а|a)?)|(?:пид(?:о|o|а|a)р)|(?:чмыр)|(?:г(?:о|o|а|a)(?:н|h|n)д(?:о|o)(?:н|h|n|c|с)?)|(?:(?:от|oт|ат|aт|пo|по)?(?:с|c)(?:о|o|a|а)( ?:c|с)(?:ед)?(?:и|e|е|a|а|y|у)?)|(?:з(?:о|а|o|a)л(?:у|y)п)|(?:ж(?:о|o)п(?:a|a|е|e|у|y|о|o)?)|(?:м(?:у|y)д(?:о|o|a|ак|ач|ил|ищ))|(?:(?:в|ф|от |ы|о|а|с|у|ре|ри)?п(?:и|е|e|ё)(?:с|c|з)(?:д|ж)(?:а|a|о|o|у|y|е|e|ю|и|ы|я|ё)?)|(?:(?:о|o|фу|ы|e|е|и)?(?:б|6)ля(?:т|ц|д|я)?)|(?:(?:на)?(?:х|x) (?:e|е)(?:р|p)(?:h|н|o|о)?)|(?:(?:вы|не|ни|о|o|от|oт|ь|ъ|на|за|ре|ри|у|раз|долба)?(?:e|е|ё|и)(?:б|6|п)(?:оль)?(?:с|o|о|е|e|щ|к|и|н|у|y|л|ы|ё |а|a)?)','gi'); window.infegral_antimat_repl=function(){this.value=this.value.replace(window.infegral_antimat_regexp,'[мат]');}; window.infegral_antimat_inpage=function(){this.innerHTML=this.innerHTML.replace(window.infegral_antimat_regexp,'[мат]');}; jQuery(document).ready(function(){ jQuery('.posttdMessage,#block21,.cMessage').each(window.infegral_antimat_inpage); jQuery('#message,#mchatMsgF').change(window.infegral_antimat_repl); jQuery('#message,#mchatMsgF').blur(window.infegral_antimat_repl); jQuery('#mchatIfm2').load(function(){ this.contentWindow.jQuery('.cMessage').each(window.parent.window.infegral_antimat_inpage); }); });
</script>
P.S. Всё, что выше, крайне не рекомендуется к применению (за исключением этого, но я слегка добавил возможностей)
Простите, случайно попал на эту тему. Наверно, наивный я (чем более пользуюсь юкоз'ом, тем более убеждаюсь в его "бесплатности"... не в укор, все понимаю), но как новичку хотелось бы услышать "официальную" точку зрения... я не конкретно об этой теме. ( А мож я не в теме?.. все подобные рецепты проходят премодерацию?)
но как новичку хотелось бы услышать "официальную" точку зрения...
Что для вас “Официальная точка зрения”? Одобрение официальным лицом того или иного скрипта?
Quote (shtof)
я не конкретно об этой теме
А о какой тогда?
Скажу по данной теме, личное мнение - все подобные клиентские скрипты - коим является JavaScript - ерунда. Лучший антимат - адекватные Администратор/Модераторы форума. И правильная система штрафов и наказания.
Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует. Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Четверг, 24 Май 2012, 04:36:19
fflesh, В данном случае. для меня ваше (модератора данного форума) мнение - официальное. Полагаю, что вы знаете к каким последствиям может привести то или иное использование исполняемых приложений (не входящих по умолчанию в юкоз)... ну я загнул... извини, не знаю как точнее выразиться
Полагаю, что вы знаете к каким последствиям может привести то или иное использование исполняемых приложений (не входящих по умолчанию в юкоз)...
По умолчание много чего не входит в юкоз, и некоторые вещи очень полезны. Но не, так называемые, скрипты антимата и подобные. Во первых, всё это работает на стороне клиента, а значит может быть отключено или обойдено. Второе, антимат, как модуль, по сути словарь, а словарь - это достаточно большой объем данных для сравнения, а значит серьёзная нагрузка на браузер клиента и высокое время исполнения скрипта. Словарь из 100 слов/регулярных выражений - это не словарь. Если словарная база маленькая, неполная - толку от неё ноль. И будут ложные срабатывания - «сучья деревьев» В третьих, в некоторых случаях мат/неформальные выражения может быть кстати. Отфильтровать такое, мнение, может только человек.
Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует. Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Четверг, 24 Май 2012, 04:50:20
Товарищи, ну что вы людям головы дурите. Самый первый скрипт у меня не пашет, страница становится девственно чиста. Да и вообще циклы в топку, ничего не смог с ними написать. Остальные вообще не понял как работают. И по всей видимости они заменяют текст уже на странице, а не в форме добавления. Зачем это? Надо лучше модерировать. А вот для присечения попыток написать мат на форуме и в комментах ловите мое простое решение:
Код
<script language="javascript"> var mat = /мат0|мат1|мат2/igm; //по аналогии делаем словарь setInterval('antimat()', 100); //больший интервал советую не ставить, т.к. будет срабатывать с тормозами, а так быстро function antimat() { txt = document.getElementById("message").value; txt = txt.replace(mat, '[мат]'); //в кавычках вставьте свою замену на вкус document.getElementById("message").value=txt; } </script>
Нужно воткнуть в шаблоне добавления постов в самый конец или в самое начало. Работает как часы. По поводу лишней нагрузки не бойтесь - матерных слов и их вариантов (регистр не учитывается, не надо вводить одно и тоже слово с разным регистром) не так уж много, а срабатывание таймера и функции выдержит даже калькулятор, что говорить о мощных компах. Проводил эксперемент с более 3к символов в форме, срабатывало без глюков. А что про мобилки и планшеты - там набор текста сам по себе тормозит, тоже ничего страшного не случится. P.S. Проверить можете легко - правьте словарь, копируйте, CTRL+U и вставляем в head или любое другое место, жмем применить изменения и любуемся. Я всегда так скрипты пишу, чтоб прям сразу проверять.
Сообщение отредактировал starlayt - Пятница, 11 Янв 2013, 02:21:14
Не проверял, если такой простой как 2х2 код где-то не работает, очень удивительно. Мобилы с планшетами опять не в счет, как показали опыты яваскрипт в них работает фиг знает как - вот такой простой к примеру не запустится, а супернавороченый например новогодние снежинки будет работать. Doctype у меня не используется, скрипт работает. И тут работает, только заметил важную особенность - надо включить режим bb кодов, т.е. если редактор заскриптован ( используется визуальное редактирование) то небудет работать. Т.е. форма добавления должна быть простая, а не со всеми плюшками. Хотя и для нее найдется решение, надо покапать шаблон и вставить в нужном месте кусок этого скрипта (без тегов script, var перенести в начало) в другой скрипт.
Сообщение отредактировал starlayt - Пятница, 11 Янв 2013, 02:32:38
Это не важно используете или нет и каким обозревателем пользуетесь, если предлагаете скрипт то он должен работать в любых обозревателях (IE, Opera, Chrome, Firefox), как с Doctype так и без него ..
Цитата
очень удивительно
И кстати бывает очень часто, так как "скрипачи" несомневаясь в своём опыте пишут и не проверяют простые скрипты ... В итоге НЕ РАБОТАЮТ в том или ином случае ..