2009-06-11 4 views
2

У меня есть строка, которая может включать в себя br или span .../span теги или другие HTML-символы/сущности. Мне нужен надежный способ снять все это и получить оставшиеся символы UTF-8. В идеале это должно быть кросс-платформенным.C++: удалить все форматирование HTML из строки?

Нечто подобное было бы идеально:

http://snipplr.com/view/15261/python-decode-and-strip-html-entites-to-unicode/

но также удаляет теги.

ответ

0

Вы хотите просто удалить эти элементы или преобразовать HTML в обычный текст?

Вариант 1:

Если вы просто хотите, чтобы удалить все места где и вы можете использовать поиск по регулярному выражению и заменить.

Вариант 2:

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

IOW, это эквивалентно копированию веб-страницы из браузера в буфер обмена, а затем вставка его в блокнот.

2

Насколько строги ваши требования? Необходимо простое FSA с двумя состояниями. Начните в состоянии READCHAR. Всякий раз, когда вы читаете «<» в этом состоянии, переход в состояние READTAG; в противном случае напишите символ в строку результата. Всякий раз, когда вы находитесь в состоянии READTAG и читаете '>', переходите к состоянию READCHAR.

Редактировать: Упс. Пропущена часть сущностей. Вы тоже не будете иметь статус READENTITY. Когда вы переходите от него, вы также можете преобразовать код в соответствующий символ UTF-8.

+0

Отметим, что больше государств требуется, поскольку атрибуты могут содержать «>». – strager

+0

Это правда, поэтому я спросил, насколько строги его требования. A '>' в теге довольно маловероятен, но, безусловно, может произойти. Аналогично, алгоритм должен быть более сложным, если вам приходится иметь дело с потенциально искаженным HTML или выполнять специальные действия для определенных тегов. –

+0

OP утверждает, что «надежный», который, вероятно, означает «работает как человек, ожидал бы, полагая, что он полностью понимает стандарт во всех случаях». Поэтому «>» в ​​атрибуте, вероятно, нужно будет обработать. – strager

1

Я не понимаю, чего вы хотите.

Вход: Это строка

текста & на многих линиях "

Если этот выход:

1) This is a string <br> <br /> of text & on many lines " (Replace &amp; with & and &quot; with ") 
2) This is a string of text & on many lines " 
+0

Он хочет наоборот. См. Вопрос: «удалить все форматирование HTML». – strager

+0

«Что-то вроде этого было бы идеальным: http://snipplr.com/view/15261/python-decode-and-strip-html-entites-to-unicode/ , но это также удаляет теги». Слово, но заставляет меня думать, что он не хочет удалять теги. – chocojosh

Смежные вопросы