在截断的字符串中关闭HTML标记

时间:2013-11-06 18:19:59

标签: c# jquery asp.net vb.net

我有一个ASP.NET页面,一个接一个地显示一些博客文章。我不想打印整个博客帖子,只打印一组带有“阅读更多”链接的字符。每个帖子都在数据库中保存为html,从中加载。我目前从帖子中删除所有html标签并显示设置的字符数(例如前300个)但我最终失去了所有的样式。如果我不删除标签,那么截断的帖子会获得各种未关闭的html标签,这些标签会破坏页面,特别是在IE上。博客文章是通过我无法控制的其他系统输入的。为了解决这个问题,我编写了一个方法,它将字符串中的html添加到数组列表中的所有开始标记,并且一旦标记被关闭,它就会从数组列表的末尾删除它,所以最后数组列表是只剩下没有关闭的开放标签。我检查这些标签并用其结束标签替换每个标签。然后我将所有这些结束标记添加到字符串并将字符串附加到实际的html字符串。在字符串中添加开始标记时,我会忽略包含/>的所有标记。避免自我关闭标签。这是我的工作,但我的方法很容易出错,因为html字符串是不可预测的。有没有更好的解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

假设博客帖子的结构一致,请提取博客帖子的内容并根据需要重新格式化,而不是试图将博客文章作为原始html进行操作。

例如,如果博客的格式如下,

<blog>
  <title>The blog title</title>
  <content>
    A bunch of content
  </content>
</blog>

然后将博客解析为POCO

public class Blog
{
  public string Title { get; set; }
  public string Content { get; set; }
}

然后操纵内容并根据需要重新显示。

<div class="blog-summary">
  <h1>@Model.Title</h1>
  <p>
    @Model.Content.Substring(0, 300)
  </p>
</div>

这样你只会获取博客内容的子字符串,而不是标记。