首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP替换多个占位符?

问用PHP替换多个占位符?
EN

Stack Overflow用户
提问于 2012-04-11 20:37:55
回答 2查看 12.2K关注 0票数 3

我有一个发送站点电子邮件的功能(使用phpmailer),我想要做的基本上是让php用我提供给它的内容替换email.tpl文件中的所有占位符。对我来说,问题是我不想重复代码,因此我创建了一个函数(如下所示)。

如果没有php函数,我将在脚本中执行以下操作

代码语言:javascript
复制
// 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个占位符和3个值,另一个脚本可能需要传递10个占位符和3个值给函数,以便在电子邮件模板中使用。

我不确定我是否需要在脚本上使用一个数组来使用函数,并在函数中使用一个for循环,也许是为了让我的php函数从脚本中接收xx占位符和xx值,并遍历占位符并将它们替换为这些值。

这是我在上面提到的函数。我注释了这个脚本,它可能更容易解释。

代码语言:javascript
复制
// 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!";
  }
}
EN

回答 2

Stack Overflow用户

发布于 2016-05-18 05:26:22

PHP解决方案可以是:

简单

替换机制的

  • 用法

​

中的short open tags

请找到the wide answer at Programmers.StackExchange以了解有关PHP电子邮件模板的其他方法。

票数 1
EN

Stack Overflow用户

发布于 2012-04-11 20:44:40

为什么你不把邮件模板也做成一个php文件呢?然后,您可以执行以下操作:

代码语言:javascript
复制
Hello <?=$name?>, my name is <?=$your_name?>, today is <?=$date?>

在电子邮件中生成HTML,然后将结果作为电子邮件发送。

在我看来,你是不是很艰难?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10106052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档