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