方法 1:使用 substr() 函数(PHP 原生函数)
substr() 可以从字符串的指定位置截取指定长度的子字符串,要截取后几位,需要计算起始位置。

(图片来源网络,侵删)
语法:
substr($string, $start, $length)
$string:原始字符串$start:起始位置(从 0 开始),负数表示从字符串末尾开始计算$length:截取长度(可选)
示例:
{dede:field name='title' function='substr(@me, -5)'/}
@me表示当前字段值(这里是title)-5表示从字符串末尾开始截取 5 个字符
方法 2:使用 cn_substr() 函数(DedeCMS 自带函数)
cn_substr() 是 DedeCMS 提供的字符串截取函数,支持中文字符(GBK/UTF-8),但默认是从开头截取,如果要截取后几位,可以结合 strlen() 计算长度。
语法:

(图片来源网络,侵删)
cn_substr($string, $length, $start)
$string:原始字符串$length:截取长度$start:起始位置(可选,默认 0)
示例:
{dede:field name='title' function='cn_substr(@me, strlen(@me), strlen(@me)-5)'/}
strlen(@me)获取字符串总长度strlen(@me)-5计算从倒数第 5 位开始的截取
方法 3:使用 mb_substr() 函数(多字节安全,推荐)
如果站点使用 UTF-8 编码,mb_substr() 是更安全的选择,能正确处理中文字符。
语法:
mb_substr($string, $start, $length, 'UTF-8')
$string:原始字符串$start:起始位置(负数表示从末尾开始)$length:截取长度'UTF-8':字符编码(需与站点编码一致)
示例:

(图片来源网络,侵删)
{dede:field name='title' function='mb_substr(@me, -5, 5, "UTF-8")'/}
-5表示从倒数第 5 位开始5表示截取 5 个字符
方法 4:自定义函数(灵活处理)
如果需要更复杂的逻辑(如截取后几位并添加省略号),可以在 include/helpers/helper.helper.php 中添加自定义函数:
// 在 helper.helper.php 中添加
function get_last_chars($str, $length = 5) {
if (mb_strlen($str, 'UTF-8') <= $length) {
return $str;
}
return '...' . mb_substr($str, -$length, $length, 'UTF-8');
}
模板调用:
{dede:field name='title' function='get_last_chars(@me, 5)'/}
| 方法 | 适用场景 | 示例 |
|---|---|---|
substr() |
纯英文或单字节字符 | substr(@me, -5) |
cn_substr() |
DedeCMS 默认编码(GBK) | cn_substr(@me, 5, strlen(@me)-5) |
mb_substr() |
UTF-8 编码(推荐) | mb_substr(@me, -5, 5, 'UTF-8') |
| 自定义函数 | 需要复杂逻辑 | get_last_chars(@me, 5) |
推荐使用 mb_substr(),尤其是 UTF-8 环境下,能避免乱码问题。
