2

例如我使用这个:

对于电子邮件模板:

电子邮件.tpl:

hello {username}, 
your password is: {password}

解析器.php

function parse(){
$message = file_get_contents("email.tpl");
$patterns[0] = "/\{username\}/";
$patterns[1] = "/\{password\}/";
$replacements = array();
$replacements[0] = $username;
$replacements[1] = $password;
return preg_replace($patterns, $replacements, $message);
}

对于 html 模板:html.tpl:

<b>hello {username}</b>, 
<p>your password is: {password}</p>

解析器.php

function parse(){
$message = file_get_contents("html.tpl");
$patterns[0] = "/\{username\}/";
$patterns[1] = "/\{password\}/";
$replacements = array();
$replacements[0] = $username;
$replacements[1] = $password;
return preg_replace($patterns, $replacements, $message);
}

这是最好的方法还是有更好的方法?

4

2 回答 2

3

您的方法很好,但是您会发现 PHP 人员经常提到的一件事是“PHP 已经是一个模板引擎”。

因此,您可以执行以下操作:

电子邮件.tpl

<?php
hello $username, 
your password is: $password
?>

解析器.php

<?php
function parse($username, $password) {
    ob_start();
    require 'email.tpl';
    return ob_get_clean();
}
?>

调用解析函数

$emailBody = parse('Someuser', 'Somepass');
于 2012-10-17T17:15:46.227 回答
0

可以使用 preg_replace 但由于您没有进行动态替换(您只有 2 个名为用户名和密码的静态变量),您可以只使用函数 strtr。

strtr做简单的字符串替换

preg_replace进行复杂的正则表达式字符串搜索和替换

strtr 会快很多(如果你的 html 很重).. 你可以像这样使用它:

function parse(){
    $message = file_get_contents("html.tpl");
    return strtr ( $message , array(
        "{username}" => $username,
        "{password}" => $password,
    ));
}

如果您想要一个动态系统(自动替换 0...n 个变量),preg_replace 是不错的选择

于 2012-10-17T17:22:33.863 回答