在安企CMS中管理内容,我们常常会遇到需要处理 HTML 标签的场景。无论是为了内容的纯净性、展示需求,还是为了保证安全,灵活地控制 HTML 标签都是一项重要的能力。安企CMS 强大的模板引擎提供了 striptags 和 removetags 这两个非常有用的过滤器,它们能帮助我们轻松实现清除所有 HTML 标签或仅移除指定标签。
接下来,我们将一起深入了解这两个过滤器是如何工作的,以及如何在实际运用中发挥它们的最大价值。
清除所有 HTML 标签:striptags 过滤器
想象一下,你有一段从外部复制粘贴过来的内容,里面包含了各种复杂的 HTML 标签,比如 <div>、<span>、<p>、<strong>、<i> 甚至一些不应该出现的样式标签。如果直接展示这些内容,可能会破坏你网站的整体布局和风格。这时,striptags 过滤器就派上用场了。
striptags 过滤器的工作非常直接和彻底:它会将一段字符串中的所有 HTML、XML 乃至 PHP 标签都剥离干净,包括 HTML 注释。它的目标是提供最纯粹的文本内容。
何时使用 striptags?
- 生成内容摘要或简介: 在文章列表页,你可能只想显示文章的纯文本简介,而不需要任何图片或复杂的排版。使用
striptags可以确保生成的摘要干净整洁。 - 制作纯文本导出: 如果你需要将内容导出为纯文本格式,或者用于 RSS feed,
striptags是一个理想的选择。 - 处理不可信的外部内容: 尽管安企CMS 的模板引擎默认会对输出进行 HTML 转义以防止 XSS 攻击,但如果你的内容源非常复杂且不可信,额外使用
striptags可以提供一层额外的保障,确保没有任何潜在的恶意脚本标签被渲染。
如何使用 striptags?
它的用法非常简单,只需要将需要处理的变量通过管道符 | 连接到 striptags 过滤器即可。
假设我们有一个变量 articleContent,其值为 <strong><i>Hello 安企CMS!</i></strong><p>这是一个测试段落。</p>。
如果你想将其中的所有 HTML 标签移除,只保留纯文本,可以这样写:
{# 假设 articleContent 变量包含 HTML 内容 #}
<div>原文:{{ articleContent|safe }}</div>
<div>清除所有标签后:{{ articleContent|striptags|safe }}</div>
在这个例子中,articleContent 经过 striptags 处理后,输出将是 Hello 安企CMS!这是一个测试段落。。需要注意的是,这里为了在浏览器中看到过滤器实际移除标签的效果,我们给原始输出和处理后的输出都加上了 |safe 过滤器,以避免安企CMS 模板引擎默认的 HTML 转义机制将标签本身显示为实体字符。
精准移除指定标签:removetags 过滤器
有时候,我们不希望移除所有 HTML 标签,而是希望保留大部分排版,只针对性地移除一些特定的、不希望出现的标签。例如,你可能想保留段落 p 和列表 ul/li 标签,但要移除所有 font 标签和内联 style 属性,以确保内容样式受你网站 CSS 的控制。这时,removetags 过滤器就能提供这种精细的控制。
removetags 过滤器允许你指定一个或多个 HTML 标签名称,它会精确地从字符串中删除这些标签及其内容(如果标签是自闭合的,比如 <img>,则只删除标签本身;如果是配对标签,如 <strong>,则删除开始和结束标签,但保留标签内的文本内容)。
何时使用 removetags?
- 标准化内容格式: 当你从不同来源导入内容,并且发现某些特定的 HTML 标签(如
<span>、<b>、<font>)被滥用,导致样式不一致时,removetags可以帮你批量清理。 - 优化内容语义: 某些旧版 HTML 标签,例如
<i>,可能在语义上不再推荐使用。如果你希望内容更符合现代 Web 标准,可以移除它们,同时保留其包裹的文本。 - 清理外部引用: 如果你的内容中常常包含来自其他网站的引用,可能会带有一些不必要的或有问题的标签,你可以使用
removetags进行选择性清理。
如何使用 removetags?
使用 removetags 时,你需要将要移除的标签名称作为参数传递给过滤器。如果是多个标签,可以使用逗号 , 将它们隔开。
继续使用 articleContent 变量:<strong><i>Hello 安企CMS!</i></strong><p>这是一个测试段落。</p>
移除单个标签: 假设我们只想移除
<i>标签,但保留<strong>和p标签:<div>移除<i>标签后:{{ articleContent|removetags:"i"|safe }}</div>输出将是
<strong>Hello 安企CMS!</strong><p>这是一个测试段落。</p>移除多个标签: 假设我们想同时移除
<i>标签和<strong>标签:<div>移除<i>和<strong>标签后:{{ articleContent|removetags:"i,strong"|safe }}</div>输出将是
Hello 安企CMS! <p>这是一个测试段落。</p>
通过这种方式,removetags 过滤器赋予了我们极大的灵活性,可以在保留所需格式的同时,精准地剔除不需要的 HTML 元素。
总结与应用场景
striptags 和 removetags 都是安企CMS 模板引擎中处理 HTML 标签的利器,但它们的应用场景有所侧重。
- 当你需要彻底剥离所有 HTML 格式,只保留纯文本时,比如在生成文章摘要、制作纯文本导出内容,或对内容进行最严格的净化时,选择
striptags。 - 当你需要有选择性地移除特定 HTML 标签,同时保留其他结构和样式时,比如标准化外部导入内容的格式、移除不符合语义的旧标签,或清理特定干扰元素时,选择
removetags。
在日常的内容运营中,了解并善用这两个过滤器,将能让你更有效地管理和展示内容,确保网站的整洁、一致和安全性。
常见问题 (FAQ)
1. 为什么有时候我使用了 striptags 或 removetags 过滤器,但浏览器里还是显示 HTML 标签,比如 <p> 而不是一个实际的段落?
这通常是因为安企CMS 的模板引擎默认会对所有输出内容进行 HTML 实体转义,以防止 XSS 攻击。当你的变量本身已经是经过转义的 HTML 实体(例如,内容中本来就是 <p>),或者你在使用过滤器之后没有明确声明内容是安全的 (|safe),模板引擎会再次对其进行转义。为了让 striptags 或 removetags 能够正确识别并处理 HTML 标签,你需要确保输入给它们的内容是原始的 HTML 字符串,并且在最终展示时,如果希望浏览器渲染 HTML 标签而不是显示实体字符,需要额外添加 |safe 过滤器。例如:{{ archive.Content|removetags:"p"|safe }}。
2. 除了这两个过滤器,安企CMS 在内容安全方面还有哪些内置功能来防止恶意 HTML 代码(如 XSS 攻击)?
安企CMS 对内容安全非常重视。除了 striptags 和 removetags 可以在前端模板层面进行内容清理外,系统还内置了多重安全机制。最基础且重要的是,安企CMS 的模板引擎默认会自动对所有从后台输出到前端的 HTML 标签进行转义。这意味着,即使内容中包含了 <script> 等恶意标签,它们通常也会被转换为 <script> 等实体字符,从而无法执行。此外,安企CMS 后台也提供了内容安全管理、敏感词过滤等功能,可以从源头对内容进行审核和清洗,进一步降低安全风险。
3. 如果我想移除大部分 HTML 标签,但又希望保留图片 <img> 和链接 <a>,应该怎么操作呢?
在这种情况下,removetags 过滤器是你的**选择。你可以列出所有你希望移除的标签,但刻意排除 img 和 a 标签。例如,如果你想移除 p、strong、i 等标签,但保留图片和链接,可以这样写:{{ article.Content|removetags:"p,strong,i,span,div"|safe }}。这样,除了你明确指定的标签会被移除,<img> 和 <a> 标签以及它们的属性都会被保留下来。如果你还需要对图片和链接进行进一步的样式或行为控制,