dede html2text功能实现原理是什么?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 DEDE建站 正文

这个功能在织梦后台通常被称为 “把HTML保存为纯文本”“获取摘要”,是织梦一个非常核心且实用的功能。

dede html2text
(图片来源网络,侵删)

什么是 html2text

html2text 的字面意思是 "HTML to Text",即 将 HTML 格式的代码转换成纯文本格式。 管理中,这意味着:

  • 输入:一篇完整的文章内容,可能包含 <p> 段落、<img> 图片、<h1> 标题、<strong> 加粗、<a> 链接等复杂的 HTML 标签。
  • 输出:不包含任何 HTML 标签的、干净的纯文本字符串。

举个例子:

  • HTML 输入:
    <h2>欢迎来到我的网站</h2>
    <p>这是一段<strong>非常重要</strong>的文字,<a href="https://www.example.com">点击这里</a>可以了解更多。</p>
    <img src="image.jpg" alt="一张图片">
  • Text 输出:
    欢迎来到我的网站
    这是一段非常重要的文字,点击这里可以了解更多。

在织梦CMS中,html2text 主要用在哪些地方?

织梦的 html2text 功能并非一个独立的工具,而是深度集成在多个核心功能模块中,主要用于自动生成摘要和规范数据。

摘要 (最核心的用途)

这是 html2text 最常见的应用场景,当你在发布一篇文章时:

  • description (文章简介)

    • 作用:用于 SEO 优化,是搜索引擎在搜索结果页展示的描述文字,也是 <meta name="description" content="..."> 标签的内容。
    • 织梦逻辑:如果你没有手动填写文章简介,织梦会自动调用 html2text 函数,截取文章正文的前 N 个字符(通常是 200 字)作为 description,这个过程会先去除所有 HTML 标签,再进行截断,确保生成的摘要干净、规范。
  • keywords (文章关键词)

    • 作用:用于 SEO 优化,告诉搜索引擎这篇文章的核心主题是什么。
    • 织梦逻辑:织梦可以通过 html2text 处理后的纯文本来提取关键词,虽然织梦的关键词更多是依赖手动填写,但底层的数据处理也离不开文本的纯净。

栏目简介

在创建或编辑栏目时,栏目简介字段也支持 HTML 编辑器,但最终存储到数据库并用于列表页或内容页调用时,织梦同样会使用 html2text 来确保简介是纯文本,避免意外的 HTML 标签破坏页面布局。

自定义模型字段

当你创建自定义模型(下载软件、产品介绍)时,可以添加多种字段类型,其中一种就是 “文本area”“编辑器” 类型的字段,这些字段存储的内容如果需要在列表页等地方以摘要形式展示,织梦的模板标签(如 [field:字段名 function='html2text(@me)'/])就会调用此功能。

模板标签调用

在织梦的模板文件(.htm)中,你可以手动使用 function 修饰符来对任意字段进行 html2text 处理。

语法示例:

{dede:field.body function='html2text(@me)'/}

这段代码的意思是:获取 body 字段(文章正文)的内容,并使用 html2text 函数将其转换为纯文本后显示。


如何使用 html2text

使用方式分为两种:后台自动使用前台手动调用

后台自动使用(无需手动干预)

这是最常见的情况,你只需要:

  1. 正常使用编辑器编写文章内容。
  2. 在文章的“和“关键词”部分,如果留空,织梦系统会在保存文章时自动处理。
  3. 在“高级选项”中,你可以设置摘要的长度,这个长度就是 html2text 截取文本的长度。

优点:完全自动化,对用户非常友好。

前台模板手动调用

当你需要在模板的某个特定位置,显示一段经过处理的纯文本摘要时,就需要手动调用。

场景:在文章列表页,你希望在标题和日期下方显示一段 100 字的正文摘要,但又不希望出现任何 HTML 标签。

示例代码 (list_article.htm):

{dede:list pagesize='10'}
    <li>
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
        <!-- 手动调用 html2text,截取前100个字符作为摘要 -->
        <p class="summary">
            [field:description function='html2text(@me)'/]
            <!-- 如果系统自动生成的摘要为空,则从正文中截取 -->
            <span>
                [field:body function='cn_substr(html2text(@me), 100)'/]
            </span>
        </p>
        <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:list}

代码解析:

  • [field:description function='html2text(@me)'/]:直接调用系统自动生成的 description,并用 html2text 再次处理(虽然它已经是纯文本,但这样写更严谨)。
  • [field:body function='cn_substr(html2text(@me), 100)'/]:这是一个更强大的组合。
    • @me:代表当前字段的原始值,即 [field:body] 的内容(带 HTML 标签的正文)。
    • html2text(@me):将原始正文转换为纯文本。
    • cn_substr(..., 100):是织梦的另一个常用函数,作用是“截取字符串前 N 个字符”,这里它截取经过 html2text 处理后的前 100 个字符。

html2text 的局限性

虽然 html2text 很有用,但它也有一些需要注意的地方:

  1. 会丢失所有格式:它只关心文本内容,会完全移除加粗、斜体、颜色、换行、列表等所有 HTML 格式,如果摘要中需要保留这些格式的视觉提示(比如用 表示加粗),它无能为力。
  2. 可能截断不完整:如果正好截断在一个词语的中间,可能会产生不自然的阅读体验。
  3. 不处理图片:默认情况下,html2text 会直接忽略 <img> 标签及其 alt 文本,但织梦通常有专门的标签 [field:image/] 来处理图片,所以这通常不是问题。

html2text 是织梦 CMS 一个基础但至关重要的底层功能,它像一个“净化器”,确保了从数据库中读取并用于展示(尤其是摘要、SEO、列表页)的内容是干净、规范、可读的纯文本,对于用户来说,大部分时间是“无感”的,系统在后台自动完成;但对于需要精细控制模板显示的开发者来说,掌握其在模板中的手动调用方法,能极大地提升网站的灵活性和用户体验。

-- 展开阅读全文 --
头像
c 语言 namespace
« 上一篇 02-03
dede nginx 伪静态规则如何配置?
下一篇 » 02-03

相关文章

取消
微信二维码
支付宝二维码

目录[+]