Xpoint
   [напомнить пароль]

Ищем незакрытые теги (<i>, <u>, <b>) и закрываем их

Метки: [без меток]
[удл]
2006-09-17 15:59:04 [обр] Andrej[досье]
Некоторые некорректно написанные комментарии пользователей портят все остальные. Люди забывают закрывать доступные теги <i>, <u>, <b>.
Помогите пожалуйста написать фильтр, который сможет справится с этой проблем, который смоет закрывать незакрытые теги.
спустя 17 минут [обр] Алексей В. Иванов(100/2861)[досье]
Вы разрешаете людям вставлять небезопасный HTML на страницы? Если да, то ничего не стоит украсть сессии ваших пользователей, собрать статистику, вставить рекламу и т.п.
Вам это нужно: http://xpoint.ru/forums/programming/perl/modules/thread/32195.xhtml, но если теория интересует, то вот реализация на PHP: Простановка закрывающих тегов в HTML тексте
спустя 1 час 4 минуты [обр] Andrej[досье]

На мой взгляд все достаточно защищено.
Вот маленькая вырезка:

$text =~ s/\</[/g;
$text =~ s/\>/]/g;
$text =~s/[^ .,\\*$%@()~`_{}!?:;\/a-zA-Zа-яА-ЯЁё0-9[\]_-]+//g;
$text =~ s/\[i\]/<i>/g;
$text =~ s/\[\/i\]/<\/i>/g;

Спасибо за 2 ссылку, сейчас попробую разобраться.

спустя 2 часа 40 минут [обр] Владимир Палант(387/4445)[досье]
Для начала хватит уже вставлять каждое сообщение в отдельный блок, к примеру <div>. Тогда браузер автоматически расставит закрывающие теги, если ваша система не сработает (это еще не повод выдавать невалидный HTML, конечно).
спустя 14 минут [обр] Andrej[досье]
div {
font: normal 11px Tahoma,Verdana,Arial;
}
---
<div>mes<u>sage1</div>
<div>mes<b>sage2</div>
<div>me<i>ssage3</div>
<div>message4</div>
Вы об этом? Такой способ замечательно работает в IE и Opera но под Mozilla все корява.
спустя 27 минут [обр] Владимир Палант(387/4445)[досье]
Действительно, я был уверен, что все браузеры закрывают строковые теги на границе блока, но Gecko работает иначе. Ну, тогда вам все-таки придется отдавать валидный код ;)
спустя 1 минуту [обр] Владимир Палант(387/4445)[досье]
PS: Для валидного кода недостаточно просто закрывать теги. Есть ведь еще и такое:
m<b>e<u>s</b>s</u>age
спустя 4 часа 29 минут [обр] Давид Мзареулян(9/1003)[досье]
Включение кода в таблицу гарантированно закрывает все хвосты.
Powered by POEM™ Engine Copyright © 2002-2005