Как найти незакрытый тэг

Bermuda

Новичок
Как найти незакрытый тэг

Стоит задача обрезать текст для того, чтобы он не превышал максимальное количество символов и влазил в дизайн главной страницы сайта. Обрезаю по словам (т. е. по пробелам), но текст может содержать тэги HTML с атрибутами (внутри тэга будут пробелы). Таким образом один незакрытый тэг может перекосить всю страницу.

Есть идея закрывать все возможные тэги, но HTML получится невалидным. В поиске искал -- не нашел схожей темы.

Как найти незакрытые тэги? Может быть у кого-нибудь есть готовый regexp для этого? Может задача имеет другое решение?

Заранее благодарен.
 

_RVK_

Новичок
Bermuda
Лично я просто вырезаю ВСЕ теги из текста. Обычно в покоцанном тексте форматирование не нужно.
Во-вторых, одно из решений, разрешить только некоторые, простые теги. Проследить закрытие тегов в таблице очень сложно. А простые, типа <i><b><u>, это уже вполне выполнимо.
В-третьих, одними регами задачу не решить.
Так, же не стоит забывать, что наличие лишнего закрытого тега, никак не влияет на отображение страницы. Следовательно проще всего ваделить все разновидности тегов в тексте, а потом просто закрыть их в самом конце.

Пример: Это <i>кусок</i> <u>текста с различными</u> <b>тегами...</i></u></b>
 

Bermuda

Новичок
Автор оригинала: Diesel
Bermuda
Лично я просто вырезаю ВСЕ теги из текста. Обычно в покоцанном тексте форматирование не нужно.
В моем случае нужно. Вырезаются только ненужные тэги и атрибуты. Текст создается в админской панели с помощью FCKeditor который и создает HTML и в итоге текст должен отображаться с тэгами.

Во-вторых, одно из решений, разрешить только некоторые, простые теги. Проследить закрытие тегов в таблице очень сложно. А простые, типа <i><b><u>, это уже вполне выполнимо.
Это частное решение. Хотелось бы общее.

В-третьих, одними регами задачу не решить.
Не верю.

Так, же не стоит забывать, что наличие лишнего закрытого тега, никак не влияет на отображение страницы.
Следовательно проще всего ваделить все разновидности тегов в тексте, а потом просто закрыть их в самом конце.

Пример: Это <i>кусок</i> <u>текста с различными</u> <b>тегами...</i></u></b>
Однако следуя стандарту XHTML такого быть не должно.

В любом случае спасибо за идеи.
 

_RVK_

Новичок
Однако следуя стандарту XHTML такого быть не должно
Имхо это параноя. Конечно, это следует использовать только совместно c "во-вторых".
А я не верю что можно написать рег, который бы считал открытые и закрытые теги, учитывал теги, которые не закрываются, следил бы за атрибутами, например, colspan, rowspan... Не верю!
 

Bermuda

Новичок
Имхо это параноя.
Это попытка следовать стандарту, привести документы к XML-совместимому виду.

А я не верю что можно написать рег, который бы считал открытые и закрытые теги, учитывал теги, которые не закрываются, следил бы за атрибутами, например, colspan, rowspan... Не верю!
1. Атрибуты уж точно здесь не при чем. Каждый открытый тэг должен быть закрыт. Даже <br>.
2. Мне важно знать какой тэг не закрыт, дабы не лепить все возможные закрывающие тэги. Порядок закрытия пока не важен.
 

SelenIT

IT-лунатик :)
Где-то (кажись, на Xpoint'е) предлагалось что-то вроде такого: при проходе по тексту добавлять каждый найденный открывающий тег в конец массива, при обнаружении закрывающего тега - удалять из массива последний соответствующий открывающий. Тогда (при отстутствии в тексте nesting errors) при достижении точки "обрезки" в массиве останутся незакрытые в этой точке теги в правильной последовательности (если я ничего не перепутал)...
 

Bermuda

Новичок
SelenIT
Примерно то, что нужно. На работе коллега предлагала что-то подобное, но в результате языкового барьера я ее не понял и идея не прошла.

Большое спасибо!
 
Сверху