2010-04-25 1 views
0

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

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

Как я конвертировать все HTML-теги в BBCodes (и заменить опустошить, который не является BB-коды, теги P

+5

[Вы не можете разобрать HTML с использованием регулярных выражений!] (Http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- содержащиеся теги) – SLaks

+0

Я прочитал этот пост, я знаю. Но. У меня есть пользовательский ввод. и пользователь будет вводить в программу html в нормальном формате. Я делаю пользовательский формат ввода. я надеюсь, что вы меня понимаете .. =) – Dmitriy

+0

Вы все еще можете работать с пользовательскими вводами, используя библиотеки манипуляций DOM. И в любом случае невозможно без потерь конвертировать из HTML в BBCode, так как последнее не поддерживает все, что делает первое. –

ответ

2

некоторые HTML-теги, вы можете просто сделать простой string.Replace. BBCode во многом представляет собой отображение 1: 1, tag-for-tag, например <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 или что-нибудь еще, как вам нравится.

2

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

+0

oh ,, no)) У меня есть четкий xhtml. некоторые теги: p, b, u, i, span, br, strong, h1-h6 ... thats all ..) – Dmitriy

+0

Что вы подразумеваете под «clear xhtml»? Вам все равно нужно (ну, должно) использовать парсер для таких элементов, как '

+0

i have clear link: only name только это. другое я могу потерять – Dmitriy

0

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

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

Вот моя рецензия http://www.foliotek.com/devblog/convert-html-to-bbcode-in-c/

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

  • Нет связанных вопросов^_^