变量修饰器 Modifiers

变量修饰器 Modifiers

修饰器用于对变量做格式化处理,用管道符 | 分隔、参数用冒号 : 传递(字符串参数需加引号)。DouView 内置恰好 20 个标准修饰器,注册于 filter/StandardFilters.php,运行期由 RenderContext::filter() 分发。

链式组合

{$content|truncate:100|nl2br|strip_tags}
{$title|escape:"html"|default:"默认标题"}

修饰器从左到右依次作用,前一个的输出是后一个的输入。下面逐一详解。

1. truncate — 截断字符串(UTF-8 安全)

{$var|truncate:长度:省略符:是否断词:是否中间截断}

签名 truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)。长度按 UTF-8 字符计;break_words=false 不在词中间断;middle=true 从中间截断(首尾各保留一半)。

{$content|truncate:100}
{$content|truncate:50:"...更多":false}

2. escape — 多类型转义

{$var|escape:转义类型:字符集}

签名 escape($string, $esc_type = 'html', $char_set = 'UTF-8')。支持的转义类型:

类型 行为
html htmlspecialchars(ENT_QUOTES)
htmlall htmlentities(ENT_QUOTES)
url rawurlencode
urlpathinfo URL 编码但保留斜杠
quotes 转义单引号
hex / hexentity / decentity 十六进制 / 十六进制实体 / 十进制实体编码
javascript JS 字符串转义
mail 邮箱保护(@ → [AT],. → [DOT])
nonstd ASCII ≥ 126 的字符转实体
{$user_input|escape:"html"}
{$url|escape:"url"}

若修饰器链中已含 |escape(或 |escape:"html"),则该输出不再追加全局自动转义,避免双重转义。

3. nl2br — 换行符转 br

{$var|nl2br}

签名 nl2br($string),把换行符转为 HTML 换行标记。

4. strip_tags — 去除 HTML 标签

{$var|strip_tags:是否替换为空格}

签名 strip_tags($string, $replace_with_space = true)。true(默认)把标签替换为空格,false 直接删除。

{$html_content|strip_tags}
{$html_content|strip_tags:false}

5. capitalize — 首字母大写

{$var|capitalize:是否数字大写}

签名 capitalize($string, $uc_digits = false)。uc_digits=true 时数字开头的词也大写。

6. cat — 字符串连接

{$var|cat:"连接字符串"}

签名 cat($string, $cat = ''),在变量后拼接字符串。

{$name|cat:"先生"}

7. count_characters — 统计字符数

{$var|count_characters:是否包含空格}

签名 count_characters($string, $include_spaces = false)。true 含空格(按字节长度),false(默认)只统计非空白字符。

8. count_paragraphs — 统计段落数

{$var|count_paragraphs}

签名 count_paragraphs($string),按换行分割统计段数。

9. count_sentences — 统计句子数

{$var|count_sentences}

签名 count_sentences($string),按句末点号统计。

10. count_words — 统计单词数

{$var|count_words}

签名 count_words($string),按空白分割后统计含字母/数字的词数。

11. date_format — 日期格式化

{$日期变量|date_format:格式字符串:默认日期}

签名 date_format($string, $format = '%b %e, %Y', $default_date = '')。输入可为时间戳、YYYYMMDDHHMMSS 串或 strtotime 可解析字符串。使用 strftime 占位符,PHP 8.1+ 自动映射为 date() 等价格式(strftime 已废弃),输出与 PHP 5.6~8.0 一致。

常用占位符:

占位符 含义 占位符 含义
%Y 四位年 %y 两位年
%m 月(01-12) %d 日(01-31)
%e 日(不补零) %H 24 小时制
%I 12 小时制 %M 分钟
%S 秒 %a / %A 星期缩写 / 全称
%b / %B 月份缩写 / 全称 %p AM/PM
%R H:i %T H:i:s
{$timestamp|date_format:"%Y-%m-%d %H:%M:%S"}
{$create_time|date_format:"%Y年%m月%d日"}

12. default — 默认值

{$var|default:"默认值"}

签名 default($string, $default = '')。当变量未设置或为空字符串时回退默认值。

13. indent — 每行缩进

{$var|indent:缩进数:缩进字符}

签名 indent($string, $chars = 4, $char = ' '),在每行行首插入指定数量的字符。

14. string_format — sprintf 格式化

{$var|string_format:"格式"}

签名 string_format($string, $format),format 为必填。底层调 sprintf。

{$price|string_format:"%.2f"}

15. strip — 多空白压缩

{$var|strip:替换字符}

签名 strip($text, $replace = ' '),把连续空白压缩为单个字符(默认空格)。

16. lower — 转小写

{$var|lower}

17. upper — 转大写

{$var|upper}

18. replace — 字符串替换

{$var|replace:"查找字符串":"替换字符串"}

签名 replace($string, $search, $replace),search 与 replace 均为必填,底层调 str_replace。

{$content|replace:"旧文本":"新文本"}

19. spacify — 字符间插入分隔

{$var|spacify:分隔字符}

签名 spacify($string, $spacify_char = ' '),在每个字符之间插入分隔符。

{$word|spacify:"-"}

20. wordwrap — 自动换行

{$var|wordwrap:行长度:换行符:是否截断单词}

签名 wordwrap($string, $length = 80, $break = "\n", $cut = false)。cut=true 在词中间换行,默认 false 按词边界。

附:与全局转义的关系

  • 修饰器链里已含 |escape(HTML 类)时,引擎不再补一次全局自动转义;
  • 输出追加 nofilter 时强制不转义(详见「关闭转义 Nofilter」篇)。
添加日期: