如何回应PHP中的$符号

时间:2014-10-16 15:11:10

标签: php mysql

我使用带有动态正文字段的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 等内容?

4 个答案:

答案 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;