我使用带有动态正文字段的mailscript,因此管理员用户可以构建自己的BODY。但在身体中我需要有一些变量。
管理员用户的输入示例:
[公司]亲爱的[姓名], 感谢您注册
此文本将被插入表格中。但现在我想使用此输入来构建自动邮件。所以$ body的内容应该是:
来自$ company的亲爱的$ name, 感谢您注册
这是我的代码:
$inserted_text = addslashes($_POST['inserted_text']);
$patterns = array();
$patterns[0] = '/[name]/';
$patterns[1] = '/[company]/';
$replacements = array();
$replacements[1] = '$name';
$replacements[0] = '$company';
$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text));
$body = <html><head>...</head><body> $inserted_text_dynamic </body>
mail($to, $subject, $body, $headers);
但输出出错?如何在$ body中设置 $ name 等内容?
答案 0 :(得分:3)
$replacements[1] = '$name';
$replacements[0] = '$company';
这不会以你想要的方式工作,因为单引号会抑制变量的扩展。
使用双引号:
$replacements[1] = "$name";
$replacements[0] = "$company";
或没有引号:
$replacements[1] = $name;
$replacements[0] = $company;
@MichaelBerkowski也正确地指出你在正则表达式模式中使用方括号,但方括号是正则表达式中的元字符,所以你应该转义它们。或者选择其他字符来分隔电子邮件模板中的占位符。或者使用一个固定字符串替换而不是正则表达式的函数。
答案 1 :(得分:0)
有很多方法可以将它用作
echo "Dear $name from $company, thanks for registering";
双引号中的变量是自动赋值的,或者如果你想使用单引号,那么你可以试试这个。
echo 'Dear '.$name. ' from '.$company. ', thanks for registering';
答案 2 :(得分:0)
这不起作用:
$replacements[1] = '$name';
$replacements[0] = '$company';
使用双引号:
$replacements[1] = "$name";
$replacements[0] = "$company";
或没有引号:
$replacements[1] = $name;
$replacements[0] = $company;
使用此:
$body = "<html><head>...</head><body> " . $inserted_text_dynamic . " </body>";
而不是:
$body = <html><head>...</head><body> $inserted_text_dynamic </body>
删除
中的第一个括号$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text));
像这样:
$inserted_text_dynamic = preg_replace($patterns, $replacements, $inserted_text);
答案 3 :(得分:0)
这里有几件事情 - 语法错误和不正确的正则表达式。 Here是一个完整的解决方案示例。
$_POST['inserted_text'] = 'Dear [name] from [company], thanks for registering';
$name = 'foo';
$company = 'bar';
$inserted_text = addslashes($_POST['inserted_text']);
$patterns = array();
$patterns[0] = '/\[name\]/'; // you have to escape square brackets in regex because they are special to regex
$patterns[1] = '/\[company\]/';
$replacements = array();
$replacements[1] = $name; // removed quotes
$replacements[0] = $company; // removed quotes
$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text));
$body = '<body>' . $inserted_text_dynamic . '</body>';
echo $body;