バックグラウンド
C#
BBCode を HTML に変換する非常に単純な BBCode パーサーを作成しました。現在、、、およびタグのみをサポートして[b]
い[i]
ます[u]
。ユーザーが入力したものに関係なく、BBCode は常に有効であると見なされることを私は知っています。BBCode を HTML に変換する厳密な仕様が見つかりません
質問
- 標準の「BBCode to HTML」仕様は存在しますか?
- どのように処理すればよい
"[b][b][/b][/b]"
ですか? 今のところ、パーサーは を生成し"<b>[b][/b]</b>"
ます。 - 入力をどのように処理すればよい
"[b][i][u]zzz[/b][/i][/u]"
ですか? 現在、私のパーサーは"<b><i><u>zzz</u></i></b>"
そのような場合に出力を生成するのに十分スマートですが、それは「スマートすぎる」アプローチなのだろうか、それともそうではないのでしょうか?
詳細
すぐに使用できる BBCode パーサーの実装をいくつか見つけましたが、それらは私には重すぎて複雑すぎます。さらに悪いことに、大量の正規表現を使用し、期待どおりのマークアップを生成しません。理想的には、出力で XHTML を受け取りたいと考えています。「BBCode から HTML へ」の変換規則を推測するために、私はこのオンライン パーサーを使用しています: http://www.bbcode.org/playground.php。私の意見では直感的に正しい HTML を生成します。私が気に入らないのは、XHTML を生成しないことだけです。たとえば、 (終了タグの順序に注意)"[b][i]zzz[/b][/i]"
に変換されます。"<b><i>zzz</b></i>"
もちろん、FireBug はこれを として表示し"<b><i>zzz</i></b><i></i>"
ます。私が理解しているように、ブラウザはそのような間違った終了タグの順序のケースを修正しますが、私は疑問があります:
- このブラウザの機能に頼って、XHTML を作成しようとしないでください。
- おそらく次の
"[b][i]zzz[/b]ccc[/i]"
ように理解する必要があります"<b>[i]zzz</b>ccc[/i]"
- そのような不適切な書式設定を論理的に見ますが、一般的なフォーラム BBCode の出力 ( *zzz****ccc* ではなく **[i]zzzccc[/i] )と競合しています。
ありがとう。