我有这行代码允许我删除在我的文本中显示的HTML标记,但它丢失了所有格式。我想知道是否有任何方法删除HTML标签,但保持文本的格式,如粗体,斜体等。这是代码行:
report.Description = Regex.Replace(report.Description, "<.*?>| ", string.Empty);
以下是显示说明字段的代码行:
graphics.DrawString("" + report.Description, font2, XBrushes.Black, new XRect(margin, page.Height - (lineHeight * 35), page.Width, page.Height), XStringFormats.TopCenter);
我在reports.cs文件中也有这个公共类:
public string Description { get; set; }
我正在使用PDFsharp将其显示在PDF中。 任何建议或支持将不胜感激。谢谢。
答案 0 :(得分:0)
这听起来很像一个人可能创建的过滤器,以防止跨站点脚本攻击。我们的想法是保持一部分HTML元素被认为是安全或可取的,并丢弃所有其他元素。
Regex.Replace 的几种形式接受每次找到正则表达式匹配时调用的 MatchEvaluator 委托。保留某些元素的逻辑可以在委托中实现。
以下课程可能符合您的需求。
public static class HtmlFilter
{
private static HashSet<string> _keep;
static HtmlFilter()
{
_keep = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
_keep.Add("b");
_keep.Add("em");
_keep.Add("i");
_keep.Add("span");
_keep.Add("strong");
// Add other tags as needed.
}
private static string ElementFilter(Match match)
{
string tag = match.Result("${tag}");
if (_keep.Contains(tag))
return match.Value;
else
return string.Empty;
}
public static string Apply(string input)
{
Regex regex = new Regex(@"</?(?<tag>\w*)[^>]*>| ");
return regex.Replace(input, new MatchEvaluator(ElementFilter));
}
}
然后,您可以使用以下方式过滤报告说明:
report.Description = HtmlFilter.Apply(report.Description);
请注意,正则表达式会保留HTML属性,以便保留<span style="...">
等格式设置元素。