我有一个函数发出站点电子邮件(使用phpmailer),我想要做的事情基本上是用php来替换email.tpl文件中的所有placheholder与我提供的内容。对我来说,问题是我不想重复代码,因此我创建了一个函数(见下文)。用PHP替换多个占位符?
没有一个PHP函数,我会做一个脚本
// email template file
$email_template = "email.tpl";
// Get contact form template from file
$message = file_get_contents($email_template);
// Replace place holders in email template
$message = str_replace("[{USERNAME}]", $username, $message);
$message = str_replace("[{EMAIL}]", $email, $message);
现在我知道该怎么做休息下,但我粘在str_replace()
,如上图所示,我有多个str_replace()
功能,以取代电子邮件模板中的占位符。我想是的str_replace()
添加到我的功能(如下图),并把它找到[\]
所有实例电子邮件模板,我给它,并用占位符值替换它,我会给这样的:str_replace("[\]", 'replace_with', $email_body)
问题是我不知道如何将多个占位符和它们的替换值传入我的函数,并获得str_replace("[{\}]", 'replace_with', $email_body)
来处理我给它的所有占位符,并用相应的值替换。
因为我想在多个地方使用该功能并避免重复代码,所以在某些脚本上,我可能会传递函数5个占位符,并且值和另一个脚本可能需要传递10个占位符,并将值传递给要使用的函数在电子邮件模板。
我不确定是否需要在脚本中使用一个数组,该函数将使用该函数并在函数中使用for
循环,以便让我的php函数获得xx占位符和xx值从一个脚本,并通过占位符循环,并取代它们的值。
这是我上面提到的功能。我评论了这个脚本,这可能更容易解释。
// WILL NEED TO PASS PERHAPS AN ARRAY OF MY PLACEHOLDERS AND THERE VALUES FROM x SCRIPT
// INTO THE FUNCTION ?
function phpmailer($to_email, $email_subject, $email_body, $email_tpl) {
// include php mailer class
require_once("class.phpmailer.php");
// send to email (receipent)
global $to_email;
// add the body for mail
global $email_subject;
// email message body
global $email_body;
// email template
global $email_tpl;
// get email template
$message = file_get_contents($email_tpl);
// replace email template placeholders with content from x script
// FIND ALL INSTANCES OF [{}] IN EMAIL TEMPLATE THAT I FEED THE FUNCTION
// WITH AND REPLACE IT WITH THERE CORRESPOING VALUES.
// NOT SURE IF I NEED A FOR LOOP HERE PERHAPS TO LOOP THROUGH ALL
// PLACEHOLDERS I FEED THE FUNCTION WITH AND REPLACE WITH THERE CORRESPONDING VALUES
$email_body = str_replace("[{\}]", 'replace', $email_body);
// create object of PHPMailer
$mail = new PHPMailer();
// inform class to use smtp
$mail->IsSMTP();
// enable smtp authentication
$mail->SMTPAuth = SMTP_AUTH;
// host of the smtp server
$mail->Host = SMTP_HOST;
// port of the smtp server
$mail->Port = SMTP_PORT;
// smtp user name
$mail->Username = SMTP_USER;
// smtp user password
$mail->Password = SMTP_PASS;
// mail charset
$mail->CharSet = MAIL_CHARSET;
// set from email address
$mail->SetFrom(FROM_EMAIL);
// to address
$mail->AddAddress($to_email);
// email subject
$mail->Subject = $email_subject;
// html message body
$mail->MsgHTML($email_body);
// plain text message body (no html)
$mail->AltBody(strip_tags($email_body));
// finally send the mail
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent Successfully!";
}
}
非常感谢你,第一位代码向我解释了这一切,你所做的这个类非常感谢,但是我还没有学会oop,所以会给它一个错误,但是第一个样例很适合我需要的谢谢,非常感谢! :) – PHPLOVER 2012-04-11 13:35:37
@PHPLover:那么请参阅以及[类似的电子邮件模板问题和答案](http://stackoverflow.com/q/8176804/367456)和[用变量替换占位符的有效方法](http:/ /stackoverflow.com/q/7980741/367456)。 – hakre 2012-04-11 13:56:12