在构建论坛或需要用户输入格式化文本的应用程序时,BBCode是一种非常流行的标记语言。它允许用户以一种简单直观的方式添加格式化效果,如加粗、斜体、下划线等。然而,将BBCode转换为HTML格式以便在网页上正确显示,需要一个解析器。本文将介绍如何使用一个BBCode解析器,并展示如何通过自定义标签来实现代码高亮等功能。
在众多的BBCode解析器中,选择了一个基于Mike343的帖子中提供的解析器。这个解析器基本上能够满足需求,但还有一些问题需要修正,并且缺少一些想要的BBCode标签。因此,对其进行了更新和改进。
可以从以下链接下载更新后的BBCode解析器。这个版本修正了原始实现中的一些问题,并添加了一些缺失的BBCode标签,包括一组自定义标签,用于提供CSharpFormat所提供的语法高亮功能。
要将BBCode块转换为HTML,可以调用BbCodeProcessor类的静态Format方法。例如:
        string exampleBbcCode =
        @"
        [b]这段文字是加粗的[/b]
        [i]这段文字是斜体的[/i]
        [u]这段文字是下划线的[/u]
        ";
        string html = BbCodeProcessor.Format(exampleBbcCode);
    
上述代码将被转换为:
        <p>
        <strong>
        这段文字是加粗的
        </strong>
        <br>
        <em>
        这段文字是斜体的
        </em>
        <br>
        <u>
        这段文字是下划线的
        </u>
        </p>
    
通过CSS,可以自定义BBCode标签的显示样式。例如,Cyotek网站使用以下默认规则:
        .bbc-codetitle,
        .bbc-quotetitle {
            margin: 1em 1.5em 0;
            padding: 2px 4px;
            background-color: #A0B3CA;
            font-weight: bold;
        }
        .bbc-codecontent,
        .bbc-quotecontent {
            margin: 0 1.5em 1em;
            padding: 5px;
            border: solid 1px #A0B3CA;
            background-color: #fff;
        }
        .bbc-codecontent pre {
            margin: 0;
            padding: 0;
        }
        .bbc-highlight {
            background-color: #FFFF00;
            color: #333399;
        }
        .bbc-spoiler {
            color: #C0C0C0;
            background-color: #C0C0C0;
        }
        .bbc-indent {
            padding: 0 1em;
        }
        .bbc-list {
            margin: 1em;
        }
    
如果在使用MVC,可能会发现以下HTML Helper对于在视图中转换代码非常有用:
        public static string FormatBbCode(this HtmlHelper helper, string text)
        {
            return BbCodeProcessor.Format(helper.Encode(text));
        }