【发布时间】:2011-10-29 08:24:59
【问题描述】:
我正在开发一个用于管理收件人组和要发送的多个内容的应用程序
我想使用不同的 html 设计,所以我将它保存在一个包含一些 PHP 代码的表格中。
但问题是,当使用这些 HTML 内容发送邮件时,我没有执行 PHP 代码。
我正在使用 PHPMailer 发送邮件并使用 addlashes 保存 HTML 内容并使用 stripslashes 返回。
谢谢。
【问题讨论】:
我正在开发一个用于管理收件人组和要发送的多个内容的应用程序
我想使用不同的 html 设计,所以我将它保存在一个包含一些 PHP 代码的表格中。
但问题是,当使用这些 HTML 内容发送邮件时,我没有执行 PHP 代码。
我正在使用 PHPMailer 发送邮件并使用 addlashes 保存 HTML 内容并使用 stripslashes 返回。
谢谢。
【问题讨论】:
使用 addlashes 保存的 HTML 内容并返回 带斜线。
这很糟糕。我不知道您为什么这样做,但如果您的意图是逃避查询,请使用 mysql_real_escape_string() 或数据库驱动程序的模拟函数(或使用参数化查询)。
如果你的意图是,我不知道,清理 html?好吧,那没用。因此,无需出于任何原因在此处添加斜杠。
但问题是,我在发送时没有执行 PHP 代码 使用这些 HTML 内容发送邮件。
因为你的内容是作为字符串返回的,所以 PHP 会这样读取它,包括标签。
一个最肮脏的解决方案,非常不赞成,正在使用eval() 来评估 php 代码并让它执行。但这是非常危险的,可能会导致严重的安全问题,所以我什至不会给你看一些例子:)
最佳解决方案是使用某种模板系统。我不建议使用 Smarty 或其他成熟的模板引擎,但您可以推出一个简单的自定义代码解析器,它可以按照以下方式工作:
您使用占位符保存变量,例如
{{variable_text}} {{recipient}} {{address}}
或类似的东西。您只需替换您需要的内容,因此在您阅读此电子邮件的 PHP 脚本中,您可以这样做
$change = array('recipient' => 'John Smith',
'address' => 'Unknown Avenue, 666',
'variable_text' => 'We are glad to invite you to');
$text = '<p>To: {{recipient}}.</p>
<p>Address: {{address}}.</p>
Message: Dear{{recipient}}<br />{{variable_text}}';
foreach($change as $k => $v)
{
$text = str_replace('{{'.$k.'}}', $v, $text);
}
【讨论】: