【发布时间】:2010-03-29 20:11:39
【问题描述】:
关于如何去除html标签有很多问题,但关于关闭它们的功能/方法的问题并不多。
情况是这样的。我有一个 500 个字符的消息摘要(包括 html 标签),但我只想要前 100 个字符。问题是,如果我截断消息,它可能位于 html 标记的中间……这会弄乱一些东西。
假设 html 是这样的:
<div class="bd">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <br/>
<br/>Some Dates: April 30 - May 2, 2010 <br/>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <em>Duis aute irure dolor in reprehenderit</em> in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <br/>
</p>
For more information about Lorem Ipsum doemdloe, visit: <br/>
<a href="http://www.somesite.com" title="Some Conference">Some text link</a><br/>
</div>
我将如何获取前 100 个左右的字符? (虽然,理想情况下,这将是“内容”的前大约 100 个字符(在 html 标记之间)
我假设最好的方法是使用递归算法来跟踪 html 标签并附加任何会被截断的标签,但这可能不是最好的方法。
我的第一个想法是使用递归来计算嵌套标签,当我们达到 100 个字符时,寻找下一个“
这样做的原因是对现有文章进行简短摘要,而无需用户返回并提供所有文章的摘要。如果可能,我想保留 html 格式。
注意:请忽略 html 不是完全语义化的。这是我所见即所得的处理方式。
编辑:
我添加了一个潜在的解决方案(这似乎有效)我认为其他人也会遇到这个问题。我不确定它是不是最好的......而且它可能并不完全强大(事实上,我知道它不是),但我会很感激任何反馈
【问题讨论】:
-
你的算法听起来不错。您可能需要一个不需要关闭的 HTML 标记列表:HR、BR、IMG
-
不确定这是否适合您,但看起来很有趣:htmlagilitypack.codeplex.com
-
Html Agility 包听起来很有趣......我越想这个算法......我越意识到有很多边缘情况......
-
边缘情况比你想象的还要多。毫无疑问,HTML 敏捷包是要走的路。