Как конвертировать HTML в BBcode в C # - PullRequest
1 голос
/ 25 апреля 2010

Мне нужно конвертировать html текст в bbcodes . Где я могу найти, как мне это сделать? Например, я конвертирую ссылки:

 regex = new Regex("<a href=\"(.+?)\">(.+?)</a>");
 htmlCode = regex.Replace(htmlCode, "[URL]$1[/URL]");

Как я могу преобразовать все html-теги в bb-коды (и заменить их на пустые, которые не являются bb-кодами, тэг P

Ответы [ 3 ]

3 голосов
/ 25 апреля 2010

Вместо того, чтобы использовать регулярные выражения (которые не может когда-либо когда-либо анализировать HTML), попробуйте использовать HtmlAgilityPack для поиска по дереву DOM и изменения соответствующих тегов HTML в BBCode. Создание нового действительного документа BBCode может показаться самым сложным - может быть, есть какая-то библиотека, которая поможет где-то сделать правильную разметку BBCode?

2 голосов
/ 25 апреля 2010

Для некоторых тегов HTML, вы можете просто сделать string.Replace. BBCode во многих отношениях представляет собой всего лишь 1: 1 отображение тега для тега, например, <b> и </b> отображение на [B] и [/B] соответственно. Так что это легко сделать с помощью:

html.Replace("<b>", "[b]").Replace("</b>", "[/b]")

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

Но даже не пытайтесь использовать регулярные выражения для очистки HTML и выполнять автоматическую замену всех тегов. Например, тег <img> выглядит совершенно иначе в HTML и BBCode. В HTML это <img src="..."/> (конечный слеш необязательный), а в BBCode это [IMG]...[/IMG]. Делать это с помощью регулярных выражений ... ну, скажем так, неоптимально.

Регулярные выражения предназначены для обычных языков, и HTML не является обычным языком, это язык без контекста. Вместо этого рассмотрите возможность использования фактического анализатора HTML, например HTML Agility Pack . Затем вы можете спуститься по дереву DOM, внести в белый список нужные элементы и сопоставить их с BBCode или любым другим, как вам нравится.

0 голосов
/ 18 апреля 2011

Я знаю, что вы предполагаете использовать инструмент, созданный для анализа DOM, также известный как HtmlAgilityPack, но мне нужно было что-то, что могло бы использовать инструменты, встроенные в .net и не должно ссылаться на внешнюю DLL.

Итак, я написал конвертер в c #, который делает все это через RegEx.

Вот моя статья http://www.foliotek.com/devblog/convert-html-to-bbcode-in-c/

...