首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Smart 常用變數修飾符完整速查表

     編輯:PHP 相關知識

Smarty 常用變數修飾符完整速查表

Smarty 的修飾符(Modifiers)能對模板變數、自訂函數回傳值或字串進行格式化、轉換、過濾等操作,語法為 |modifier,多個參數以 : 分隔,可鏈式組合使用。本文整理官方文件核心修飾符,附帶實戰範例,方便開發快速查閱。

修飾符分類速查

分類修飾符說明
大小寫轉換capitalize首字母大寫
lower全字串轉小寫
upper全字串轉大寫
string_format格式化字串(sprintf 語法)
字串長度/計數count_characters計算字元數(含空白)
count_words計算單字數
count_sentences計算句子數
count_paragraphs計算段落數
wordwrap依指定寬度換行
字串擷取/替換truncate截取指定長度,支援尾碼與單字邊界
replace簡單搜尋替換
regex_replace正則表達式替換
spacify字元間插入指定字串
strip移除多餘空白/換行/Tab
strip_tags移除 HTML 標籤
編碼/轉義escapeHTML/URL/JS/十六進制等轉義
nl2br換行符轉 <br />
indent每行縮排
cat字串連接
日期/預設值date_format格式化時間戳(strftime 語法)
default變數為空時給預設值

實戰範例精選

1. 日期格式化

{* PHP: $smarty->assign('yesterday', strtotime('-1 day')); *}
{$smarty.now|date_format}                           {* Feb 6, 2001 *}
{$smarty.now|date_format:"%A, %B %e, %Y"}           {* Tuesday, February 6, 2001 *}
{$smarty.now|date_format:"%H:%M:%S"}                {* 14:33:00 *}
{$yesterday|date_format:"%A, %B %e, %Y"}            {* Monday, February 5, 2001 *}

2. 字串截取與組合

{$articleTitle|truncate:30:"..."}        {* 截取 30 字元,超出加 ... *}
{$articleTitle|truncate:30:"":true}      {* 強制在 30 字元處截斷 *}
{$articleTitle|lower|spacify|truncate:30:". . ."}  {* 鏈式:小寫→插空→截取 *}

3. 轉義輸出(防 XSS 必備)

{$var|escape}                {* 預設 html 轉義 *}
{$var|escape:"htmlall"}      {* 轉義所有 HTML 實體 *}
{$var|escape:"url"}          {* URL 編碼 *}
{$var|escape:"javascript"}   {* JS 字串轉義 *}
{$email|escape:'hexentity'}

4. 預設值處理

{$title|default:"無標題"}          {* 變數空值時顯示預設字串 *}
{$user.nickname|default:$user.name} {* 也可用變數作預設值 *}

進階技巧

  • 自訂修飾符:將 PHP 函數放入 plugins/modifier.名稱.php,函數名 smarty_modifier_名稱,即可在模板直接使用 |名稱。
  • 修飾符順序很重要:|lower|spacify|truncate:30 依序執行,先轉小寫、再插空、最後截取。
  • 搭配陣列/物件:修飾符同樣適用於 {$arr.key|modifier}、{$obj->method|modifier}。

常見誤區提醒

truncate 中文亂碼?
內建 truncate 按位元組截取,中文 UTF-8 佔 3 位元組易截半個字導致亂碼。請使用 smartTruncate 或 mb_substr 封裝的自訂修飾符。
date_format 時間戳格式?
接受 Unix 時間戳(整數)或 strtotime 可解析的字串,不支援 MySQL DATETIME 字串直接格式化,需先轉時間戳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved