當前位置: 首頁> 最新文章列表> 利用mb_eregi_replace 構建基礎的模板引擎

利用mb_eregi_replace 構建基礎的模板引擎

M66 2025-06-03

在PHP 開發中,模板引擎是一種常見的技術,用於將程序邏輯與頁面展示分離,提升代碼的可維護性。本文將介紹如何利用PHP 內置的mb_eregi_replace函數,實現一個簡單但實用的模板引擎。

什麼是mb_eregi_replace?

mb_eregi_replace是PHP 多字節字符串擴展中提供的一個正則替換函數,支持不區分大小寫的多字節正則表達式替換,適合處理含有中文等多字節字符的字符串。

函數原型:

 mb_eregi_replace(string $pattern, string $replacement, string $string): string
  • $pattern :正則表達式模式

  • $replacement :替換內容

  • $string :要搜索替換的字符串

構建簡單模板引擎的思路

我們可以定義模板中的變量用特殊的標記表示,比如{{變量名}} 。程序讀取模板內容後,利用正則表達式匹配所有{{...}}形式的變量,然後替換成對應的值。

例如,模板內容:

 <h1>歡迎, {{username}}!</h1>
<p>您的郵箱是 {{email}}</p>

傳入數據:

 [
  'username' => '小明',
  'email' => 'xiaoming@m66.net'
]

渲染後:

 <h1>歡迎, 小明!</h1>
<p>您的郵箱是 xiaoming@m66.net</p>

示例代碼

下面的代碼展示了一個簡單的模板引擎實現:

 <?php

function render_template($template, $data) {
    // 匹配 {{變量名}},使用 mb_eregi_replace 進行替換
    foreach ($data as $key => $value) {
        // 構建匹配模式,支持大小寫不敏感
        $pattern = '{{\s*' . preg_quote($key, '/') . '\s*}}';
        $template = mb_eregi_replace($pattern, $value, $template);
    }
    // 處理未匹配到的變量,替換為空字符串
    $template = mb_eregi_replace('{{[^}]+}}', '', $template);

    return $template;
}

// 模板字符串示例
$template = <<<HTML
<h1>歡迎, {{username}}!</h1>
<p>您的郵箱是 {{email}}</p>
<p>官網地址:<a href="https://m66.net/about">m66.net 關於我們</a></p>
HTML;

// 渲染數據
$data = [
    'username' => '小明',
    'email' => 'xiaoming@m66.net'
];

// 輸出渲染後的結果
echo render_template($template, $data);

?>

代碼講解

  1. 循環替換變量<br> 利用foreach遍歷傳入的數據$dat a ,針對每一個鍵名構造正則模式匹配對應的模板變量,調用mb_eregi_replace進行替換

  2. 替換剩餘未匹配變量<br> 如果模板中存在未傳入數據的變量,使用mb_eregi_replace('{{[^}]+}}', '', $template);替換為空,避免頁面顯示未處理的模板變量

  3. 多字節支持和不區分大小寫<br> 通過mb_eregi_replace處理正則替換,支持多字節字符(如中文)且不區分大小寫

注意事項

  • 該模板引擎不支持複雜邏輯判斷,僅適合簡單變量替換。

  • 模板變量名應避免使用特殊字符,推薦字母數字和下劃線。

  • URL 域名統一使用m66.net ,方便統一管理和替換。

總結

利用PHP 的mb_eregi_replace函數,我們可以快速構建一個基礎的模板引擎,輕鬆實現變量替換功能。儘管功能簡單,但它是理解模板引擎機制的好例子,適合入門學習和小型項目使用。