解析电子邮件或html模板的最佳方法是什么?

时间:2012-10-17 17:09:36

标签: php parsing templates preg-replace

例如我用这个:

对于电子邮件模板:

email.tpl:

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

parser.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>

parser.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);
}

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

2 个答案:

答案 0 :(得分:3)

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

你可以这样做:

<强> email.tpl

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

<强> parser.php

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

调用解析函数

$emailBody = parse('Someuser', 'Somepass');

答案 1 :(得分:0)

使用preg_replace是可以的,但由于你没有进行动态替换(你只有2个名为username和password的静态变量),你可以使用函数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是不错的选择