2009-07-22 2 views
3

Я хотел бы создать типичный фрагмент предварительного просмотра с помощью ссылки [читать дальше]. Проблема в том, что контент, который я хотел бы использовать для SubString(), содержит текст и html, написанный пользователем с редактором WYSIWYG.Как подстроить блок генерируемого пользователем HTML при сохранении форматирования?

Конечно, я проверяю, чтобы строка не была пустой или пустой, а затем SubString(), проблема в том, что я могу закончить разбиение тэгов html, отбрасывая рендеринг всего сайта.

WYSIWYG редактор, кажется, не создавать совершенно отформатированный HTML, и много раз, кажется, использует <br /> теги вместо <p></p>, и т.д ... в принципе, я не могу полагаться на хорошо сформированные теги и т.д.

Моим обходным путем было просто вычеркнуть все HTML и подстроить оставшийся текст. Это работает, но теряет любое форматирование, которое было в HTML.

Каков наилучший метод SubString() в блоке не-правильно сформированного HTML при сохранении HTML, который не нарушит рендеринг сайта?

+1

Подумайте о том, чтобы пропустить материал вроде '

Я очень виден

'? Я думаю, что простое красиво, и ваш нынешний подход к удалению html вполне разумен. –

+0

На самом деле и
, и

хорошо сформированы XML и HTML. – tsilb

+0

tsilb правильный. Вы уверены, что HTML не сформирован? – drs9222

ответ

0

Как насчет повторения этой подстроки в поисках любых закрытых тегов и сохранения их в списке при удалении любых, которые закрыты? Затем вы можете добавить закрывающие теги для любых открытых тегов из списка (в обратном порядке), что даст вам полезный html ...

+0

Это была моя первая мысль, когда я увидел этот вопрос, но наивная реализация могла нарушить даже распространенные хитрости HTML. Например, будет работать только в случае аварии в лучшем случае. Вам нужно будет вернуться к последнему соответствующему открывающему тегу в списке, вывести соответствующие теги закрытия на этом пути. С помощью этого добавления ваш подход приведет к созданию допустимого HTML, но это может быть не тот HTML, который пользователь ожидал. С другой стороны, веб-браузеры являются сложными животными, и вы никогда не будете реплицировать свои ошибки «раздачи». Простой - это хорошо, но вы все же можете запрограммировать общие обычные случаи. – WCWedin

+0

Если вы используете необработанную длину строки, у вас есть проблема с потенциально сломанным конечным тегом (либо открывающим, либо закрывающим тегом, либо даже комбинированным). Если вы используете длину текста внутри элементов (лучший выбор) в качестве отправной точки, у вас все еще есть проблемы, не знающие размер результатов. Тест H1 будет занимать гораздо больше места, чем P и т. Д. Проблема заключается в том, что текст внутри элементов невозможен, если элементы сложены и проходят мимо предпочтительной точки отсечения. Эти, казалось бы, простые операции быстро выходят из-под контроля ... – Techmag

+0

Не говоря уже о беспорядке, который может возникнуть, если пользователь вырезал и вставил html/текст в первую очередь :) – Techmag