如何清理ASP.NET应用程序中的HTML

时间:2011-08-10 13:34:27

标签: asp.net html parsing

我有一个运行时创建的asp网页。它有一个静态模板,但页面元素及其信息是根据其他应用程序页面中的用户输入创建的。 用户也可以以html格式插入数据。当用户以html格式输入数据但他/她忘记关闭html标签等时会发生问题。 它不会导致应用程序崩溃,但浏览器在显示页面时会混淆。 我需要在创建页面时在运行时清理或解析用户输入。 有人知道怎么做吗? ASP.net是否有任何库或函数?

感谢。

2 个答案:

答案 0 :(得分:0)

使用HTML Agility Pack读取HTML,然后将其写出来,清理完毕。

示例用法(不要忘记使用HtmlAgilityPack命名空间)

    /// <summary>
    /// Tidy up a partial html string.
    /// </summary>
    /// <param name="html">Html string to tidy.</param>
    /// <returns>A cleaned html string.</returns>
    /// <remarks>If <paramref name="html" /> contains a body tag, 
    /// it returns only first body contents.</remarks>
    public static string TidyPartial(string html)
    {
        var doc = new HtmlDocument();
        doc.OptionFixNestedTags = true;
        // If you wish it to be xhtml like (does not suffice to 
        // enforce w3c xhtml validity).
        doc.OptionOutputAsXml = true;
        doc.LoadHtml(html);

        var body = doc.DocumentNode.SelectSingleNode("//body");
        var cleanedHtml = (body != null) ? 
            body.InnerHtml : doc.DocumentNode.InnerHtml;
        return cleanedHtml;
    }

答案 1 :(得分:0)

尝试使用Tidy.net正确格式化HTML。tidy.net

var document = new Tidy();
var messageCollection = new TidyMessageCollection();
document.Options.DocType = DocType.Omit;
document.Options.Xhtml = true;
document.Options.CharEncoding = CharEncoding.UTF8;
document.Options.LogicalEmphasis = true;
document.Options.MakeClean = false;
document.Options.QuoteNbsp = false;
document.Options.SmartIndent = false;
document.Options.IndentContent = false;
document.Options.TidyMark = false;
document.Options.DropFontTags = false;
document.Options.QuoteAmpersand = true;
document.Options.DropEmptyParas = true;
using (var input = new MemoryStream())
{
    using (var output = new MemoryStream())
    {
        byte[] array = Encoding.UTF8.GetBytes(xmlResult);
        input.Write(array, 0, array.Length);
        input.Position = 0;
        document.Parse(input, output, messageCollection);
        return Encoding.UTF8.GetString(output.ToArray());
    }
}

当用户可以向页面添加html时,您需要小心跨侧脚本。 看看Sanitising HTML with C# and Tidy

的这篇文章