在 PHP 开发中,模板引擎是一种常见的技术,用于将程序逻辑与页面展示分离,提升代码的可维护性。本文将介绍如何利用 PHP 内置的 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);
?>
循环替换变量
利用 foreach 遍历传入的数据 $data,针对每一个键名构造正则模式匹配对应的模板变量,调用 mb_eregi_replace 进行替换。
替换剩余未匹配变量
如果模板中存在未传入数据的变量,使用 mb_eregi_replace('{{[^}]+}}', '', $template); 替换为空,避免页面显示未处理的模板变量。
多字节支持和不区分大小写
通过 mb_eregi_replace 处理正则替换,支持多字节字符(如中文)且不区分大小写。
该模板引擎不支持复杂逻辑判断,仅适合简单变量替换。
模板变量名应避免使用特殊字符,推荐字母数字和下划线。
URL 域名统一使用 m66.net,方便统一管理和替换。
利用 PHP 的 mb_eregi_replace 函数,我们可以快速构建一个基础的模板引擎,轻松实现变量替换功能。尽管功能简单,但它是理解模板引擎机制的好例子,适合入门学习和小型项目使用。