HTMLテキストをbbcodesに変換する必要があります。どこでこれを行う必要がありますか? たとえば、リンクを変換します。
regex = new Regex("<a href=\"(.+?)\">(.+?)</a>");
htmlCode = regex.Replace(htmlCode, "[URL]$1[/URL]");
bbcodes 内のすべての html タグを変換するにはどうすればよいですか (そして、bb コードではない空のタグ、タグPに置き換えます
正規表現 ( HTML を解析することはできません) を使用するのではなく、 HtmlAgilityPackを使用して DOM ツリーを検索し、関連する HTML タグを BBCode に変更してみてください。新しい有効なBBCode ドキュメントを作成することは、これの最も難しい部分のようです。有効な BBCode マークアップを作成するのに役立つライブラリがどこかにあるのではないでしょうか?
一部のHTML タグでは、単純なstring.Replace
. BBCode は、多くの点で 1:1 のタグ対タグ マッピングです。たとえば<b>
、 およびとそれぞれに</b>
マッピングします。したがって、次のようにして簡単に実現できます。[B]
[/B]
html.Replace("<b>", "[b]").Replace("</b>", "[/b]")
それが非常に単純な HTML であり、このタグごとの実行によるパフォーマンスへの影響とコードの醜さを気にしない場合は、それを選択してください。ただし、結果の BBCode を Web ページのどこかに表示する予定がある場合は、クロスサイト スクリプティングの脆弱性に注意してください。これはサニタイズには不十分です。
しかし、わざわざ正規表現を使って HTML をサニタイズし、すべてのタグを自動的に置き換えようとする必要はありません。たとえば、<img>
タグは HTML と BBCode ではまったく異なって見えます。HTML では<img src="..."/>
(末尾のスラッシュは省略可能)、BBCode では[IMG]...[/IMG]
. 正規表現でこれを行うのは...まあ、最適ではないと言いましょう。
正規表現は正規言語用に設計されており、HTML は正規言語ではなく、文脈に依存しない言語です。HTML Agility Packなどの代わりに、実際の HTML パーサーを使用することを検討してください。次に、DOM ツリーをたどって、必要な要素をホワイトリストに登録し、それらを BBCode やその他の好きなものにマップします。
DOM(別名HtmlAgilityPack)を解析するために構築されたツールを使用することを想定していることは知っていますが、.netに組み込まれているツールを使用でき、外部dllを参照する必要がないものが必要でした。
そこで、RegExを介してすべてを実行するコンバーターをC#で作成しました。
これが私の記事ですhttp://www.foliotek.com/devblog/convert-html-to-bbcode-in-c/