如何从动态生成的HTML内容中移除所有HTML标签?

📅 👁️ 71

在网站内容管理中,我们经常会遇到一个共同的需求:从富含格式的动态内容中,提取出纯粹的文本信息。这背后的原因多种多样,比如我们需要为搜索引擎生成简洁明了的元描述(Meta Description)、在列表页面展示不带格式的摘要,或者仅仅是为了数据分析而获取干净的纯文本内容。安企CMS作为一个灵活高效的内容管理系统,充分考虑到了这些场景,通过其强大的模板引擎和内置过滤器,为用户提供了优雅且实用的解决方案。

动态内容与HTML标签的共生

在安企CMS的后台,无论是编辑文章、产品详情、分类介绍还是单页面内容,我们通常都会使用功能丰富的富文本编辑器。这些编辑器允许我们方便地插入图片、链接、调整字体样式(如加粗、斜体)、创建列表等。在内容保存到数据库后,这些丰富多样的格式实际上都是通过HTML标签来呈现的。

当我们在网站前端的模板中通过archive.Contentcategory.Descriptionpage.Content这类变量来输出这些内容时,为了保留其原有的视觉效果,通常会配合|safe过滤器,例如{{ archive.Content|safe }}。这样做会指示模板引擎将内容作为安全的HTML直接输出,浏览器便会解析并渲染其中的HTML标签。然而,在某些特定的显示区域或数据输出场景下,这些HTML标签反而会显得多余,甚至可能破坏页面的布局或数据的纯粹性。

提取纯文本的核心工具:安企CMS内置过滤器

为了解决从动态HTML内容中移除标签的问题,安企CMS的模板引擎内置了几个非常实用的过滤器,其中最主要的是striptagsremovetags

striptags:彻底移除所有HTML标签

当您的目标是获取一段绝对纯净的文本,不希望保留任何HTML格式时,striptags过滤器是您的首选。它会遍历输入的字符串,并无情地将所有HTML标签(包括开标签和闭标签)都剔除干净,只留下标签之间的纯文本内容。

使用示例: 假设您的文章内容(archive.Content)中包含 <p>这是一段<strong>加粗</strong>的文字,还有<a href="#">一个链接</a>。</p>

如果您在模板中使用:

<p>文章纯文本内容:{{ archive.Content|striptags }}</p>

页面的输出将会是:

<p>文章纯文本内容:这是一段加粗的文字,还有一个链接。</p>

可以看到,所有的<p><strong><a>标签都被移除了。

适用场景:

  • 生成纯文本摘要:在文章列表页,您可能希望只显示文章的前几十个字的纯文本摘要。
  • SEO元描述:在页面的<head>部分,meta name="description"标签的值应为纯文本,避免搜索引擎抓取到HTML标签而影响显示效果。

removetags:精准移除指定HTML标签

striptags的“一刀切”不同,removetags过滤器提供了更精细的控制。它允许您指定一个或多个您希望移除的HTML标签,而对于您未指定的其他HTML标签,则会予以保留。

使用示例: 继续上面的例子,如果您的内容是 <p>这是一段<strong>加粗</strong>的文字,还有<a href="#">一个链接</a>。</p>

如果您只希望移除其中的链接标签<a>和段落标签<p>,但保留加粗标签<strong>,可以在模板中使用:

<p>部分HTML保留内容:{{ archive.Content|removetags:"p,a"|safe }}</p>

请注意,这里使用|safe是因为removetags处理后,可能仍有HTML标签被保留,需要浏览器解析。

页面的输出将会是:

<p>部分HTML保留内容:这是一段<strong>加粗</strong>的文字,还有一个链接。</p>

这里<a>标签被移除了,但<strong>标签得到了保留。

适用场景:

  • 内容局部格式调整:在某些展示区域,您可能希望保留某些核心的文本格式(如加粗),但移除不相关的或者可能导致布局问题的标签(如图片标签<img>或视频标签<video>)。
  • 数据清洗:在准备数据用于API输出时,可能需要移除一些特定的HTML标签以满足数据格式要求。

实际应用:让内容更符合展示要求

结合以上过滤器,我们可以在安企CMS中轻松应对各种纯文本提取需求:

  1. 在文章列表或产品展示卡片中显示纯文本摘要: 在首页或分类列表页,为了保持页面的整洁和统一,通常只显示文章标题和简洁的描述。

    {% archiveList archives with type="list" limit="10" %}
        {% for item in archives %}
        <div>
            <h2><a href="{{ item.Link }}">{{ item.Title|striptags }}</a></h2>
            {# 移除所有HTML标签后,再截取前100个字符 #}
            <p>{{ item.Description|striptags|truncatechars:100 }}</p>
        </div>
        {% endfor %}
    {% endarchiveList %}
    
  2. 优化SEO元描述(Meta Description): 通过tdk标签获取的页面描述,如果源内容来自富文本编辑器,最好再进行一次striptags处理,确保输出给搜索引擎的是纯文本。

    <meta name="description" content="{% tdk seoDescription with name="Description" %}{{ seoDescription|striptags|truncatechars:150 }}">
    

    这里即便seoDescription通常已经是纯文本,多一层过滤也能规避潜在风险,并结合truncatechars控制字数。

安全与**实践

  • |safe过滤器与标签移除|safe过滤器是为了防止HTML内容被自动转义,从而让浏览器正确解析显示。当您使用striptags彻底移除所有HTML标签后,内容已变为纯文本,理论上就不再需要|safe。但如果使用removetags后仍保留了HTML标签,则可能还需要|safe来确保这些被保留的标签能被正确解析。
  • 灵活选择过滤器:根据您对最终文本格式的精确控制程度,选择striptags进行全面清理,还是removetags进行有选择性的保留。
  • 结合截断功能:在移除HTML标签后,内容长度可能依然很长。此时,结合truncatechars(按字符截断)或truncatewords(按单词截断)过滤器,可以进一步控制显示文本的长度。
  • 特殊需求:保留HTML结构并截断:值得一提的是,如果您需要在截断内容的同时保留其HTML结构(例如,截断后仍然希望加粗的文字保持加粗),安企CMS还提供了`truncatechars_

相关文章

`yesno`过滤器如何处理布尔值或空值,并自定义显示“是/否/未知”?

在安企CMS的模板开发中,如何以直观、简洁的方式展示布尔(真/假)状态或处理未知(空)值,是提升用户体验和代码可读性的重要一环。`yesno`过滤器正是为此目的而生,它能将复杂的逻辑判断简化为一行代码,并允许您自定义输出结果,例如显示为“是/否/未知”。 ### `yesno` 过滤器:布尔值与空值的智能转换器 在内容管理系统中,我们经常会遇到需要展示一个项目是否启用、某个功能是否开启

2025-11-08

`addslashes`过滤器在JavaScript或JSON数据输出中有什么用?

在网站内容管理中,尤其是当我们希望将动态数据插入到JavaScript代码或者构建JSON格式的输出时,处理特殊字符是一个不可忽视的环节。安企CMS(AnQiCMS)的模板引擎提供了丰富的过滤器来帮助我们优雅地处理这类问题,其中`addslashes`过滤器便是一个专为此类场景设计的实用工具。 ### `addslashes` 过滤器的作用解析 `addslashes`过滤器,顾名思义

2025-11-08

如何在HTML输出中确保单引号、双引号和反斜杠被正确转义?

在网站运营和模板制作过程中,我们经常需要将动态内容输出到HTML页面。这里面有一个常见但又容易被忽视的问题:如何确保内容中的单引号、双引号和反斜杠等特殊字符,在输出到HTML时不会破坏页面结构或引发安全隐患?别担心,AnQiCMS在这方面提供了非常友好的内置机制和灵活的工具,帮助我们轻松应对。 ### AnQiCMS的默认安全机制:自动转义 AnQiCMS在设计时就充分考虑了内容安全

2025-11-08

`lower`和`upper`过滤器在处理大小写转换时有哪些限制(如中文)?

在 AnQiCMS 的模板开发中,`lower` 和 `upper` 过滤器是处理文本大小写转换的常用工具。它们旨在帮助我们快速标准化文本显示,比如将用户输入的不规范内容统一为小写或大写,以保持页面风格的一致性或满足某些数据处理的需求。然而,在使用这些便捷的过滤器时,我们可能会遇到一些它们无法处理的“边界”情况,特别是当涉及到非英文字符,例如中文时。 ### `lower` 和 `upper`

2025-11-08

`removetags`过滤器能否移除HTML内容中指定的特定标签(如`<i>`)?

在安企CMS(AnQiCMS)这样灵活的内容管理系统中,处理HTML内容是日常运营中常见的任务。有时,我们希望在不彻底剥离所有HTML结构的前提下,精准地移除内容中某些特定的标签,以保持页面显示的一致性或符合设计规范。这时,`removetags`过滤器就成为了一个非常实用的工具。 ### 理解`removetags`过滤器 `removetags`是安企CMS模板引擎提供的一个内置过滤器

2025-11-08

如何在AnQiCMS模板中获取列表的第一个或最后一个元素?

在构建网站时,我们经常会遇到需要从一堆内容中挑选出最特别的一个,比如显示最新的文章作为头条,或者突出某个热门产品。在 AnQiCMS 的模板里,灵活地获取列表的第一个或最后一个元素是实现这些需求的关键。幸运的是,AnQiCMS 提供了多种直观且高效的方法来处理这些场景,让内容展示更加生动。 AnQiCMS 的模板系统采用了类似 Django 模板引擎的语法

2025-11-08

`first`和`last`过滤器在处理中文字符串时,会返回单个汉字吗?

在安企CMS的模板开发中,我们经常会用到各种过滤器(filters)来对数据进行格式化或提取。`first` 和 `last` 过滤器就是其中比较常见的两个,它们用于从字符串或数组中获取第一个或最后一个元素。很多使用安企CMS的朋友可能会好奇,当我们处理包含中文字符串的数据时,比如文章标题或内容片段,这两个过滤器会返回单个汉字吗? 答案是:**是的,安企CMS 的 `first` 和

2025-11-08

如何对URL参数进行编码以确保链接的正确性和安全性?

在安企CMS的日常运营中,我们经常需要处理各种网站链接,这些链接不仅要美观、对搜索引擎友好,更重要的是,它们必须能够正确且安全地工作。其中,对URL参数进行编码就是一个看似细微却至关重要的环节,它直接关系到我们网站链接的完整性和用户体验。 ### 为什么URL参数编码如此重要? 想象一下,如果您的网站有一个搜索功能,用户输入了包含空格、特殊符号甚至中文字符的关键词,比如“安企 CMS

2025-11-08