Автор
|
Тема: Сброс из темы 'Форум'
|
Temus
|
написано:26-02-2003 19:05:29
|
31
|
Pipa Классики нас учат, что всё, что не является необходимым, является лишним. Вот в email-рассылках вообще никакого html нет, и все только рады. Единственное - нужно как-то цитаты отделять, поэтому принято выделять их скобками, а почтовик сам подсвечивает этот текст. Итак, для цитат нам необходим тэг [i] как минимально необходимый. Для выделения ников тэг [b], и, чтобы не загромождать текст ссылками, тэг [url]. sergejh Вырезай всё, что начинается и заканчивается угловой скобкой.
ц и т а т а
|
dt
|
написано:26-02-2003 23:33:42
|
32
|
sergejh На новый формат списка тем форума взглянул? Конечно. Под версию 3.0 специально и писал :)
Автором, насколько я помню, является dt Поиск для форума на soznan.al.ru писал xor, я к нему не имею никакого отношения :) Кстати чтобы не было глюков надо делать хотя бы минимальную "защиту от дурака" - чтобы если, например, поиск не может найти какой-то файл темы, он не вылетал с ошибкой, а пропускал ее и переходил к следующей.
как вырезать из тега выражение вида: class="..."? Вырезать можно все что угодно и откуда угодно, regexp'ы в перле - штука могучая, хотя и весьма мутная для понимания :) $link=~s/@^lt;.*?(class="[^\s]+?").*?@^gt;//g; - и из всех тегов в строке $link исчезают выражения вида 'class="..."' :)
ЗЫ: "Хороший moderator закрывает плохие темы. Плохой - хорошие. Если moderator закрывает все темы подряд, то это administrator." :)))<font size="1" color="#CCCCCC">Исправлено: 26-02-2003 23:34:48</font>
ц и т а т а
|
Pipa
|
написано:27-02-2003 00:37:03
|
33
|
Поскольку sergejh решил, что модераторы разделов могут писать сообщения только в "свои" разделы (при попытке написать в "чужой" раздел выдается сообщение "Вы не имеете доступа к этому разделу!"), то вынуждена завести себе второй ник - Pipa2, не обладающей модераторскими полномочиями, а следовательно позволяющей мне и далее участвовать в форуме в других разделах. Однако, поскольку новый мой ник, согласно "новому порядку" вступит в действие только после санкции sergejh'а, то публикую ответ sergejh'у здесь. Благо что к мусорный раздел писать я еще могу.
ц и т а т а
|
Pipa
|
написано:27-02-2003 00:37:52
|
34
|
sergejh: как узнать, соответствует именно этому закрытому тегу начало тега или он "пустой"
Гм... Подумать надо! :-)))
sergejh: как вырезать из тега выражение вида: class="..."? Ведь можно написать его через любое количество пробелов. Писать огромный парсер на каждый элемент?
А зачем тебе понадобилось вырезать это вполне безобидное слово? Не class надо вырезать, а, например, style! Впрочем, думаю, убивать параметры вполне можно скопом. Благо они имеют одинаковую конструкцию - имя, знак равенства, выражение. Полагаю, что для безопасности будет вполне достаточным разрушить имя со знаком равенства, остальное же скорее всего видно не будет. Например так: s/(stylе|оnMоuseOvеr).*?=//g Здесь через символ | можно написать большущий список нежелательных элементов. Все они будут вырезаться "с мясом" (т.е. до знака равенства, включая его). Вариант, предложенный dt, плох только тем, что двойные кавычки - необязательный элемент для MSIE, в этом легко убедиться, вспомнив частоиспользуемое на форуме выражение class=themes. Кроме того, он с апетитом кушает и одинарные кавычки - апострофы. Главная тут сложность - определиться чем может заканчиваться значение class. Впрочем, если задача стоит так, что тебе надо вырезать class не в сообщении пользователя, а в формах, которые генерировались скриптом и про которые с уверенностью можно сказать, что значение класса заключено в двойные кавычки, тогда да...
Могу предложить убивать на месте все теги, содержащие "вредные параметры", например, вот так: s/@^lt;(sсriрt|dеl|stylе|аррlеt|оbjеct|pаrаm|form)(?:.|\s)*?@^lt;\/\1@^gt;//goi
sergejh: что значит не выводить на главную страницу содержимое тегов ВООБЩЕ? Если человек написал что-то, состоящее из сообщения целиком внутри тега, выводить пустую ячейку чтоли?
Под выражением "содержимое тега" имела ввиду его контекст внутри угловых скобок, а не область действия инструкции тега. Очевидно, что текст, находящийся в области действия тега сам по себе никогда не находится в угловых скобках. Например: Тра-та-та @^lt;b@^gt;sergejh@^lt;/b@^gt; тра-та-та... Убивание тегов приведет к исчезновению всего содержимого внутри угловых скобок вместе с ними. Т.е. будет эквивалентно изъятию тегов из документа. При этом остальная текстовка не пропадет. В данном примере получим: Тра-та-та sergejh тра-та-та... По простому изъять все теги для публикации на первой странице можно так: s/@^lt;.*?@^gt//g - P.S. "Живьем" работоспособность предлагаемых выражений не проверяла. Привожу в порядке дискуссии. P.P.S. Приведенные в тексте регулярные выражения модифицированы русскими буквами так, чтобы пройти фильтрацию. Их ни в коем случае нельзя копировать из этого текста для использования в скрипте. ---- Pipa<font size="1" color="#CCCCCC">Исправлено: 27-02-2003 00:39:11</font>
ц и т а т а
|
Скалли
|
написано:27-02-2003 15:11:33
|
35
|
СЕРГЕИЧ!!!!
а шрифты то не ахти... буквеся др. на др. налазят на титульной странице...
ц и т а т а
|
sergejh
|
написано:27-02-2003 15:53:58
|
36
|
Pipa <FONT SIZE=2 COLOR=#0033CC>Поскольку sergejh решил, что модераторы разделов могут писать сообщения только в "свои" разделы... </FONT>
Это опечатка в скрипте была... :) Уф... Еле перетащил сюда эти сообщения... Про скрипты - почитал.
ц и т а т а
|
AesirLoki
|
написано:27-02-2003 17:12:03
|
37
|
sergejh А зачем опять разбанил-то? Тем более теперь у тебя специальное место есть, куда таких вот хреновых юзверей складывать =8-0
И вот еще? Верни бордюрчики у полей ввода! Без них - уродство какое-то.
ц и т а т а
|
sergejh
|
написано:27-02-2003 17:25:22
|
38
|
AesirLoki <FONT SIZE=2 COLOR=#0033CC>А зачем опять разбанил-то?</FONT>
Я ж правила переписал. Вот он их вроде пока старается не нарушать. :) "Специальным местом" я еще успею попользоваться тут вдоволь. :)
А без бордюрчиков - так красивее. Стиль такой. :)
ц и т а т а
|
AesirLoki
|
написано:27-02-2003 17:36:54
|
39
|
<FONT SIZE=2 COLOR=#0033CC>А без бордюрчиков - так красивее. Стиль такой. :)</FONT> А мне не нравится. Тут цветное поле, там цветное поле... куда писАть? 3D-border - всеж полезная зело вещь.
ц и т а т а
|
sergejh
|
написано:27-02-2003 18:04:45
|
40
|
Итак, положения по тегам (так сказать, планы):
-перечень разрешенных тегов (оставим html) -вырезать все остальные (оставляя, что между ними) -замена "опасных" выражений вида ОnMouse... -на главной стр. форума - показывать всё, кроме тегов (т.е. то что между ними) -установить для тега @^lt;a hrеf=@^gt; единый класс (игнорирование, если есть еще что-то кроме @^lt;а hrеf=@^gt;)
Кто согласен, кто не согласен. Может, еще что забыл.<font size="1" color="#CCCCCC">Исправлено: 27-02-2003 18:06:06</font>
ц и т а т а
|
dt
|
написано:27-02-2003 23:07:55
|
41
|
sergejh Тот regexp, который я вчера дал не работает :) Пришлось немного поломать голову, в результате получилось нечто вроде такого:
$link=~s/@^lt;(.+?)@^gt;/'@^lt;'.suxx($1).'@^gt;'/eg;
(...)
sub suxx { my $h=$_[0]; $h=~s/(class|style|оn[^\s]+?)=[^\s]+//ig; #class, style, события оnXXX в пролете, по желанию можно добавить еще ;) $h=~s/\s+/ /g; #чтобы было красиво $h=~s/(^\s)|(\s$)//; #и еще красивше :) return($h);}
ц и т а т а
|
Pipa
|
написано:28-02-2003 13:50:06
|
42
|
Мои аплодисменты dt! Сама не знала, что в регулярное выражение можно засунуть вызов функции :-) Впрочем подобные "украшательства" внутри тега (!), на мой взгляд совершенно излишни. Т.е. вполне можно было бы свободно обойтись без внешней функции. А впрочем, пусть остается - может понадобиться еще для каких дополнительных проверок или подмен в будущем. Хотя функцию ту я бы переписала в более быстром варианте:
sub suxx { $_=shift; s/(class|style|оn[^\s]+?)=[^\s]+//ig; s/\s+/ /g; s/(^\s)|(\s$)//; return $_; }
sergejh
А ты аплодисментов не жди! :-))) Во первых, не прозевай, что в скрипте dt, не смотря на оформление в тегом @^lt;pre@^gt; в словечке "оn" первая буква оказалась подменена на русскую! И это несмотря на то, что я достала его текст не копированием из окна (тут это было бы вполне допустимым), а из окна редактирования. Уже 3-ый раз напоминаю и НАСТАИВАЮ, чтобы все редактирования, подмены и украшательства делались в момент вставки сообщения в html-страничку, а не на "сыром" сообщении пользователя, которое он вправе потребовать на повторное редактирование в том же виде, в котором отправлял! То, во что превратилось мое предыдущее сообщение при его вызове на редактирование - нельзя даже пером описать :-). Приходилось делать правки в notepad, а затем замещать все сообщение в окне целиком и снова смотреть, как оно выглядит на форуме. Весьма очевидно, что потуги "отредактировать наоборот", для того чтобы заполнить форму при вызове редактирования сообщений - в общем случае невозможны. Кроме того, будет просто проще держать авторский текст в том виде, как он есть. Это позволит кроме того работать фильтрам задним числом, без правки авторских текстов. Ясное дело, что лежа в файле "вредные теги" никакой опасности не представляют. Кроме того, у тебя самого появится возможно опробывать разные формы фильтра, просто генерируя страничку по-новой и наблюдая, как новый фильтр вправляется со старыми сообщениями. Не будет просьб со стороны пользователей "Сергеич, верни мне мой текст! Ты его совсем заредактировал" :-))) Кроме того, у тебя самого появится еще позможность иметь докуменальное подтверждение о злоупотреблении лиц, пытающихся взломать форум. А вырезая автоматом "бяки" ты тем самым завязываешь себе глаза до тех пор, пока очередная попытка не окажется удачной и на тебя со всех сторон посыплются жалобы. ---- Pipa<font size="1" color="#CCCCCC">Исправлено: 28-02-2003 13:58:38</font>
ц и т а т а
|
AesirLoki
|
написано:28-02-2003 14:09:28
|
43
|
Зато поиск рулить стал! Присылает:
@^lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitiоnal//EN"@^gt; @^lt;HTML@^gt;@^lt;HEAD@^gt; @^lt;META cоntent="text/html; charset=windows-1251" http-equiv=Cоntent-Type@^gt;@^lt;/HEAD@^gt; @^lt;BODY@^gt;@^lt;/BODY@^gt;@^lt;/HTML@^gt;
ц и т а т а
|
sergejh
|
написано:28-02-2003 15:40:34
|
44
|
dt Попробовал твой кусок. Не вырезает изнутри ссылки OnMouseОvеr.
Pipa Хорошая идея насчет вырезания тегов на этапе генерирования html, а в базе хранить "оригиналы". Приму к сведению.
Вот regexp'ы у меня до сих пор слабое место... :) Ну не понимаю я, когда целая куча точек, запятых, звездочек, вопросов подряд идут, как это работает. :) Хотя есть хороший учебник. Надо взяться за это серьезно...
ц и т а т а
|
Weather Report
|
написано:28-02-2003 15:52:36
|
45
|
а можно мне стать мудером в раздел ОВД+ ? :)))
буду белым и пушитсым (по крайней мере в момент ОВД 4ого-уровня-по-ксену) =)
ц и т а т а
|
|
|