我遇到了一个问题,该问题不允许从单元格数据中检索到的变量在我的网页上显示为声明的变量。我将在下面发布一个示例;
email.db-下面表示email_body列的单元格数据
email_body =嗨,$ name
$name = $row['name'];
$messagebody = $row["email_body"];
$message = "
<html>
<body>
<p>".$messagebody."</p>
</body>
</html>
;
"
如您所见,我正在尝试使$ row ['name']出现在$ messagebody(存储在数据库中的文本)中。我遇到的问题是上面的代码将显示$ messagebody,但是$ name变量将显示为纯文本,并将忽略该变量。
感谢您的帮助,
谢谢。
答案 0 :(得分:1)
Daniel-我认为您可能对如何在PHP字符串中呈现变量没有完全正确的认识。
但是,有一个名为sprintf
的函数可能是您要执行的操作的工具!
sprintf (string $format [, mixed $... ])
您遇到的第一个$format
参数是'Hi, %s'
-%s
是另一个字符串$name
的替身。然后将'Hi, Bobby'
设置为bobby,该函数将返回$name
。 (并且名称作为第二个参数传递。)
// Re-set the data inside of `email_body` to 'Hi, %s';
// "%s" is a placeholder that hints that a string should be placed there
$name = $row['name'];
$messagebody = sprintf($row["email_body"], $name);
$message = "<html>
<body>
<p>".$messagebody."</p>
</body>
</html>";
答案 1 :(得分:0)
您正在尝试评估字符串中的PHP代码。这通常是不安全的。取而代之的是,您可以将占位符(例如$name
)替换为实际值。
示例:
$messagebody = "Hi, $name!"
$compiledmessagebody = preg_replace('/\$name/', 'Daniel V.', $messagebody);
$message = "
<html>
<head><title></title><head>
<body>
<p>".$compiledmessagebody."</p>
</body>
</html>
";
编辑:实际上,最好使用模板引擎来完成上述工作,而且还要开箱即用。 Pug与PHP https://www.phug-lang.com/
配合得很好答案 2 :(得分:0)
我将使用HEREDOC语法:
$name = $row['name'];
$messagebody = $row['email_body'];
$message = <<<HTML
<html>
<body>
<p>$messagebody</p>
</body>
</html>
HTML;
这样一来,您不必担心出现字符串中断问题,而多行字符串看起来更加整洁。
从技术上讲,当您像以前那样使用简单变量时,不需要用双引号引起来的字符串。
使用HEREDOC语法编写最后的HTML;需要一直推到最左边在这种情况下,我使用HTML
作为标识符,但是您可以将标识符重命名为其他名称。