这是一个非常经典且常见的问题,通常不是函数本身有 Bug,而是因为字符编码不统一或配置不当导致的。

问题根源分析
Html2Text 函数的作用是将 HTML 代码(比如文章内容、产品描述)转换为纯文本,这个过程涉及到几个关键环节,任何一个环节的编码不一致都可能导致乱码。
- 数据库编码:你的文章内容是以什么编码存储在数据库中的?(通常是
utf-8或gbk) - PHP 文件编码:执行
Html2Text函数的 PHP 文件本身是什么编码? - 网页输出编码:浏览器最终接收到的网页是什么编码?(通常通过
Content-Type头或<meta>标签指定) - DedeCMS 全局配置:DedeCMS 系统的核心配置文件中关于编码的设置是什么?
乱码的根本原因就是:数据在从 A 地方(数据库)搬到 B 地方(网页)的过程中,因为“翻译规则”(编码)不统一,导致“文字”被错误地解析了。
解决方案(按优先级和常见性排序)
请按照以下步骤逐一排查和解决,大概率能解决问题。
统一数据库和网站编码(最常见、最根本的解决方案)
如果你的网站是新搭建的,强烈建议全部使用 UTF-8 编码,这是目前最通用、最不容易出问题的编码。

-
检查数据库编码:
- 登录你的网站数据库管理工具(如 phpMyAdmin)。
- 查看你的数据库(通常是
dedecms或你自定义的库名)的“整理”/“Collation”属性,确认是否为utf8_general_ci或utf8mb4_general_ci。 - 查看你的数据表(如
dede_archives)的“整理”/“Collation”属性,同样需要是utf8...。
-
检查 DedeCMS 系统配置:
- 登录 DedeCMS 后台。
- 进入 “系统” -> “系统基本参数” -> “核心设置”。
- 找到 “网站编码” 这一项,确保它被设置为
UTF-8。
-
检查文件编码:
- 使用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开出现乱码问题的 PHP 文件。
- 检查文件的编码格式,确保是
UTF-8 无 BOM 格式。 - 特别注意:强烈推荐使用“无 BOM 格式”,BOM (Byte Order Mark) 是一种隐藏的字符,有时会 PHP 输出时产生错误,导致 headers already sent 的警告,并可能引发乱码。
操作:在代码编辑器中,通常可以通过“文件” -> “另存为”或“编码”菜单,选择“UTF-8 无 BOM 格式”来保存文件。

检查并修正 Html2Text 函数的调用
问题出在调用 Html2Text 时没有正确传递或处理编码参数。
-
定位函数文件:
Html2Text函数通常位于/include/helpers/目录下的string.helper.php文件中,你可以打开这个文件找到函数定义。
-
查看函数调用方式:
- 在你调用
Html2Text的地方(比如一个列表页或内容页模板),检查代码。 - 标准的调用方式是:
// $body 是你的 HTML 内容 $text = Html2Text($body, -1); echo $text;
- 第二个参数
-1表示过滤掉所有 HTML 标签,如果不需要过滤,可以省略。
- 在你调用
-
确保输入源的编码正确:
- 传递给
Html2Text的变量(如$body)在调用前必须是 UTF-8 编码的,从数据库获取的内容:$row = $dsql->GetOne("SELECT body FROM `dede_addonarticle` WHERE aid = 10"); $body = $row['body']; // $body 应该是 UTF-8 编码 $text = Html2Text($body);
- 传递给
处理特殊字符和 HTML 实体
HTML 中包含像 , <, > 这类 HTML 实体,它们在转换时也可能出现问题。
你可以在调用 Html2Text 之前,先对内容进行一次预处理,将这些实体转换成可读的字符。
// 在调用 Html2Text 之前 $body = html_entity_decode($body, ENT_QUOTES, 'UTF-8'); $text = Html2Text($body);
html_entity_decode 函数可以将 HTML 实体转换回对应的字符。
使用更现代的替代方案(终极解决方案)
Html2Text 这个函数比较老旧,对复杂的 HTML5 标签支持不佳,且可能存在未知的编码问题,如果你的环境支持 PHP 5+,强烈推荐使用 strip_tags 函数,它更简单、更高效、更可靠。
strip_tags 的作用是去除所有 HTML 和 PHP 标签,只留下纯文本。
示例:
假设你原来这样用:
// 旧方法,可能乱码 $content = Html2Text($arcBody);
你可以直接替换为:
// 新方法,推荐 $content = strip_tags($arcBody); // 如果你需要保留换行,可以加上 nl2br // $content = nl2br(strip_tags($arcBody));
strip_tags 是 PHP 的原生函数,对编码的处理非常直接和稳定,只要你的 $arcBody 变量本身是 UTF-8 编码的,就不会有问题。
总结与排查步骤
当你遇到 Html2Text 乱码时,请按以下顺序排查:
- 首选检查:进入 DedeCMS 后台,系统基本参数 -> 核心设置,确认 “网站编码” 是
UTF-8。 - 文件检查:用代码编辑器打开所有相关的
.php文件(尤其是调用Html2Text的文件和string.helper.php),确保它们的编码是UTF-8 无 BOM 格式。 - 数据库检查:通过 phpMyAdmin 确认数据库和数据表的字符集是
utf8或utf8mb4。 - 替换函数:如果以上都正确但仍有问题,直接放弃
Html2Text,改用strip_tags()函数,这是最简单、最可能一劳永逸的解决方法。 - 最后手段:
strip_tags也不行,再考虑在调用前使用html_entity_decode()对内容进行预处理。
按照这个流程,99% 的 Html2Text 乱码问题都能得到解决。
