从字符串中删除HTML的最佳方法是什么?

时间:2010-12-29 00:19:38

标签: regex coldfusion

我最近在ReReplace()函数中开始使用以下RegEx来使用ColdFusion从字符串中剥离HTML标记。 请注意:我没有使用它作为XSS或SQL注入的保护; 这只是为了从字符串中删除现有的和安全的HTML,然后才显示在HTML标题属性中。

REReplaceNoCase(str,"<[^>]*>","","ALL")

在半相关问题I asked how to modify my RegEx中包含空格和换行符。有人告诉我,为此目的使用RegEx是不合适的this post was referenced as an explanation.

  

我强烈怀疑你发布的正则表达式实际上并不正常。我建议你不要使用正则表达式解析HTML,因为HTML不是常规语言。请改用HTML解析器。 (Mark Byers

如果这是真的,在显示之前从字符串中删除HTML的适当工具是什么? (请记住HTML已经安全;它在进入数据库之前已经过清理。)

我知道HTMLEditFormat()HTMLCodeFormat(),但这两个功能并不能满足我的需要;早期用特定于HTML转义的等价物替换特殊字符,而后者则完全相同,但也将字符串换成<pre>标记。

我想要做的是在HTML标题属性<a title="My string without HTML goes here">...</a>

中显示之前清除HTML和换行符中的字符串

有时候HTML不是必需的。例如,假设您想显示帖子的摘录,而不存储HTML。

3 个答案:

答案 0 :(得分:5)

我不同意你引用的推理。虽然HTML不应该使用regexen 解析,但剥离标签对他们来说是完美的。

但是你会比<[^>]*>更加小心,因为那会转向

<span title=">">...</span>

进入不正常的

">...</span>

所以你需要<([^">]|"[^"]*"|'[^']*')*>之类的东西。您可以使用字符替换而不是正则表达式来删除换行符,但如果您更喜欢正则表达式,则可以使用类似\n的内容(或者甚至使用替换方法将其与上面的内容结合使用,但效率更低)。

答案 1 :(得分:1)

使用chilkat html解析器chilkat。我们在学术项目中使用它来从html页面获取所有内容和超链接,以构建基本的搜索引擎。

答案 2 :(得分:1)

如果要将HTML代码段包含在标题中,您可以使用正则表达式和足够的测试覆盖所有基础。

尽管如此,作为一般提示,如果你必须处理一个更大的片段,我将使用Java的XML / DOM方式,通过使用dom4j进行解析并抓取文本,或者更可能通过使用SAX对结果进行Stringbuilding解析器。

[编辑]当我第一次回答时,我即将写出HTML必须格式合理,但假设您至少对源有一点控制权。但是,如果你没有它,我会快速链接到JTidyTagSoup,当然也没有测试过,但它们绝对是我测试消耗真实的第一件事。 -World HTML with CF。