Обрезание форматированного текста. Что делать с открытыми тегами?

[slon]

Guest
Обрезание форматированного текста. Что делать с открытыми тегами?

Пользователь создает текст с возможность минимального ворматирования (bold, italik, links)... При выводе текста мы смотрем общую длину текста и если текст превышает, например 256 сиволов, то мы его обрезаем, ставим многоточие и линк на полный текст.

Проблема: если текст обрубается на строке, которая была выделена болдом, то мое троеточее и линк также будут написаны болдом. Как это побороть?

Я вижу два решения:
1) Примитивное - так как пользователь ограничен тремя тегами то попросту перед выводом моего троеточия закрываю эти три тега.
2) Гемороидальное - сделать парсер, который проходился бы по тексту и складывал в массив все открвтые теги, как только мы натыкаемся на закрывающий тег мы удаляем этот тег из массива, таким образом в конце, в массиве останутся только не закрытые теги.

Возможно есть более простое (элегантное) решение?

P.S. Плюс при первом раскладе, теги считаются за символы текста, что также не очень хорошо при обрезании :)
 

rembo

Новичок
Стеками это можно побороть. Копишь в стек открывающиеся теги, удаляешь закрываьющиеся теги. Те что остались закрываешь в конце. Если теги запутаны (<a><b></a></b>) то задачка несколько усложняется но это нестрашно если вдуматься хорошенько.
 

[slon]

Guest
стек = массив или я что-то не догнал?
можно подробнее о том, что такое стек в данном контексте?
 

rembo

Новичок
Стек это не массив. Стек это стек. Правда эго организовывать иногда гемородальнее чем делать сдвиги в массиве. Но в данном случае помоему игра стоит свеч.
 

Tronyх

Новичок
ИМХО лучше парсером, тем более что он совсем не сложный.
 

Arthur

Good Member
проще, как мне кажется ограничить количество вводимых символов. Но это жаба скрипт.
после каждого нажатия кнопки считаешь длину введённых символов. как тока достиг необходимое кол-во. alert('Ну ты пасан разогнался чё-то !!!');

И НИКАКИХ парсеров, стеков и другого гемороя. И юзеру приятно. А то он ввёл одно, ты чего-то там нааткусывал (причём этим же создал сам себе геморой), и у он увидел совсем другое. Как ты думаешь, что он про тебя при этом скажет ???
 

[slon]

Guest
Автор оригинала: Arthur
проще, как мне кажется ограничить количество вводимых символов. Но это жаба скрипт.
после каждого нажатия кнопки считаешь длину введённых символов. как тока достиг необходимое кол-во. alert('Ну ты пасан разогнался чё-то !!!');
Категорически с тобой несогласен. Один из многочисленных примеров:
вывод preview новостей на первой странице сайта. Нужно скажем показывать первые 255 символов, и если читателю станет интересно то он нажимает на новость и может прочитать ее всю...

Можно конечно сказать редакторам чтобы они новости длинее 255 символов даже и не думали писать... :)
Сам подумай...
 

Arthur

Good Member
Я эту проблему решил по другому. Я храню новость и анонс новости.
Например:
Сдан новый комплекс "КиноМАКС" В Екатеринбурге >>
А сама новость может ыть что угодно. Например:
Вчера завершился монтаж... бля-бля-бля...
и НИКАКИХ откусываний, обрезаний и вырезаний... И куцых обрезков непонятно от чего...
Но тебя это похоже не устроит.
Тогда считай каких сколько тегов открыто, каких сколько закрыто. И в конце строки закрывай все незакрытые теги.
 
Сверху