dede如何精准截取字符串后几位?

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

方法 1:使用 substr() 函数(PHP 原生函数)

substr() 可以从字符串的指定位置截取指定长度的子字符串,要截取后几位,需要计算起始位置。

dede 截取字符串后几位
(图片来源网络,侵删)

语法:

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() 计算长度。

语法:

dede 截取字符串后几位
(图片来源网络,侵删)
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 截取字符串后几位
(图片来源网络,侵删)
{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 环境下,能避免乱码问题。

-- 展开阅读全文 --
头像
dede编辑器为何无法复制表格?
« 上一篇 02-05
c语言 比较两个数组是否相等
下一篇 » 02-05

相关文章

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

目录[+]