【问题标题】:What's the best way to remove HTML from a string?从字符串中删除 HTML 的最佳方法是什么?
【发布时间】:2011-05-31 20:06:21
【问题描述】:

我最近开始在 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 转义等效项替换特殊字符,而后者完全一样,但也将字符串包装为 &lt;pre&gt; 标记。

我想做的是在显示 HTML 标题属性&lt;a title="My string without HTML goes here"&gt;...&lt;/a&gt; 之前从 HTML 和换行符中清除字符串

有时不需要 HTML。例如,假设您想显示一篇文章的摘录,但没有与它一起存储的 HTML。

【问题讨论】:

    标签: regex coldfusion


    【解决方案1】:

    我不同意你引用的推理。虽然 HTML 不应该使用正则表达式进行 解析,但剥离标签对它们来说是完美的。

    但是你会想要比&lt;[^&gt;]*&gt;更加小心,因为那会变成

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

    进入病态

    ">...</span>
    

    所以你需要像&lt;([^"&gt;]|"[^"]*"|'[^']*')*&gt; 这样的东西。您可以使用字符替换而不是正则表达式来去除换行符,但如果您更喜欢正则表达式,您可以使用 \n 之类的东西(或者甚至使用交替将其与上述内容结合起来,但这效率更低)。

    【讨论】:

    • 查尔斯,非常感谢您的解释。我将把这个开放一段时间,看看我是否可以鼓励任何进一步的投入。您能否澄清使用“字符替换”的含义?是否有特定的功能可以做到这一点?任何关于这个概念的进一步阐述将不胜感激。
    • 我在想Replace(str, '\n', '', 'all')
    • Charles,您制作的字符串的问题是我无法使用它。双引号弄乱了函数并导致错误,因为整个正则表达式字符串必须放在双引号之间……知道我该如何解决这个问题吗?
    • 反引号:输入"&lt;([^\"&gt;]|\"[^\"]*\"|'[^']*')*&gt;"
    • 使用 cfsavecontent 将正则表达式保存到变量中。例如
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      不过,作为一般提示,如果您必须处理更大的 sn-p,我会使用 Java 的 XML/DOM 方式,或者通过使用 dom4j 解析并抓取文本,或者更有可能通过使用 String 构建结果SAX 解析器。

      [编辑]当我第一次回答时,我正要写 HTML 必须是合理的格式,但假设您至少对源有一点控制。但是,如果您没有它,我将快速链接到 JTidyTagSoup,当然,两者都没有测试,但它们绝对是我要测试的第一件事,以使用真实世界的 HTML CF。

      【讨论】:

        猜你喜欢
        • 2011-10-03
        • 2023-01-11
        • 2015-01-31
        • 2014-03-29
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2022-01-04
        • 2010-10-17
        相关资源
        最近更新 更多