使用系统自带的 cn_substr 函数(最常用、最推荐)
这是 DedeCMS 内置的、最标准的截取字符串函数,支持中英文混合,且不会乱码。

(图片来源网络,侵删)
语法:
cn_substr($str, $start, $sublen)
$str: 需要截取的字符串。$start: 开始截取的位置(从0开始)。$sublen: 截取的长度(字符数)。
使用场景:
在首页或列表页调用文章摘要(description 字段)
这是最常见的用法,比如在首页的“头条新闻”或“推荐文章”区域。
原始调用代码(通常在 index.htm 或 list_article.htm 等模板文件中):
[field:description/]
修改为限制摘要长度(例如限制为100个字符):

(图片来源网络,侵删)
[field:description function='cn_substr(@me,100)'/]
代码解释:
function='...': 这是 DedeCMS 模板中调用PHP函数的语法。@me: 这是一个特殊变量,代表当前字段的原始值。@me[field:description/]的原始内容。cn_substr(@me, 100): 意思是,对原始的description字段内容,使用cn_substr函数进行截取,长度为100个字符。
在首页或列表页调用文章正文(body 或 text 字段)
如果想在列表页显示文章正文的一部分作为摘要,而不是使用 description 字段,也可以使用此方法。
原始调用代码:

(图片来源网络,侵删)
[field:body/]
修改为限制正文长度(例如限制为200个字符):
[field:body function='cn_substr(@me,200)'/]
使用 mb_substr 函数(备用方案)
如果你的 DedeCMS 版本或环境对 cn_substr 支持不佳,或者你更习惯使用标准的 PHP 多字节字符串函数,可以使用 mb_substr。
语法:
mb_substr($str, $start, $length, $encoding)
$str: 需要截取的字符串。$start: 开始位置。$length: 截取长度。$encoding: 字符编码,必须填写,通常是'utf-8'。
使用场景:
与方法一类似,只是函数不同。
在模板中调用:
[field:description function='mb_substr(@me, 0, 100, "utf-8")'/]
代码解释:
mb_substr(@me, 0, 100, "utf-8"): 从第0个字符开始,截取100个字符,并指定字符编码为utf-8。- 注意:如果你的网站是
gbk编码,则需要将"utf-8"改为"gbk"。
通过修改 DedeCMS 核心文件(不推荐,慎用)
这种方法可以实现全局性的默认长度控制,但会破坏系统的“纯净性”,升级 DedeCMS 时可能会被覆盖,导致修改失效。
修改文件:
/include/helpers/archive.helper.php
修改步骤:
- 打开
archive.helper.php文件。 - 找到
GetMkHtml()函数(通常在文件末尾附近)。 - 在函数内找到类似这样的代码:
if($description=='') { $description = cn_substr($this->Fields['body'],$infolen); } - 修改
$infolen这个变量的值,这个变量就是控制默认摘要长度的,你可以将它改为你想要的数字,200。
缺点:
- 影响全局:这会修改所有没有单独设置摘要长度的地方,可能不是你想要的结果。
- 升级风险:每次升级 DedeCMS 后,这个文件都会被恢复,需要重新修改。
- 灵活性差:无法在模板中灵活控制不同区域的字数。
除非有特殊需求,否则强烈不推荐使用此方法。
通过CSS控制显示长度(仅视觉限制)
这种方法不是真正截取内容,而是通过CSS的 text-overflow 属性,让超出指定宽度的文本显示为省略号。
适用场景:
- 当你不确定内容的精确长度,但希望它在视觉上保持一致时。
- 当你希望保留内容的完整性,只是在页面上“隐藏”多余部分时(鼠标悬停时显示完整内容)。
CSS 代码:
.text-ellipsis {
width: 200px; /* 设置一个固定的宽度 */
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 用省略号代替被隐藏的部分 */
}
HTML 模板代码:
<div class="text-ellipsis"> [field:description/] </div>
缺点:
- 内容未截取:页面上虽然只显示了部分内容,但查看源代码会发现原始内容是完整的,这不利于SEO(搜索引擎抓取的是完整内容)。
- 依赖CSS:如果用户禁用了CSS,效果就会失效。
总结与最佳实践
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
cn_substr 函数 |
功能强大,支持中英文,不乱码,灵活可控 | 无明显缺点 | ⭐⭐⭐⭐⭐ (强烈推荐) |
mb_substr 函数 |
标准PHP函数,跨平台性好 | 需要手动指定编码 | ⭐⭐⭐⭐ |
| 修改核心文件 | 全局统一,无需每个模板修改 | 破坏系统纯净性,升级麻烦,不灵活 | ⭐☆☆☆☆ (不推荐) |
CSS text-overflow |
实现简单,视觉效果好 | 内容未真正截取,不利于SEO | ⭐⭐☆☆☆ (特定场景使用) |
最终建议:
99% 的情况下,请直接使用方法一,即 [field:字段名 function='cn_substr(@me, N)'/] 的形式。 这是最标准、最安全、最灵活的解决方案。
