此功能:
public function createMessage($post, $messagename) {
$dbData = array(); // don't forget to initialize your array
foreach ($post as $key => $value) {
$sanitizedValue = strip_tags(ucfirst(strtolower($value)));
$message = str_replace('{$'.$key.'}', $sanitizedValue, file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html'));
}
return $message;
}
当我使用file_get_contents时,不会替换HTML文件中的变量名称(副本中的{$ var}),但如果我只使用字符串而不是file_get_contents函数则可以。任何人都有任何想法。我在PHP.net的文档中没有看到任何帮助。?
答案 0 :(得分:1)
您正在为每个变量重新加载文件。在循环之前移动file_get_contents
调用:
public function createMessage($post, $messagename) {
$dbData = array(); // don't forget to initialize your array
$message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html';
foreach ($post as $key => $value) {
$sanitizedValue = strip_tags(ucfirst(strtolower($value)));
$message = str_replace('{$'.$key.'}', $sanitizedValue, $message));
}
return $message;
}
答案 1 :(得分:1)
即使它是你不会得到你期望的结果...因为你在循环的每次迭代中打开内容但从不保存内容,你将永远不会成功地替换所有变量。您将只替换最后一次迭代的一种形式。我猜想是$key
中的最后一个$_POST
没有在消息模板中匹配它的变量......所以看起来好像没有任何效果,即使它确实存在。
您需要使用file_get_contents outside
循环:
$message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html';
foreach ($post as $key => $value) {
$sanitizedValue = strip_tags(ucfirst(strtolower($value)));
$message = str_replace('{$'.$key.'}', $sanitizedValue, $message));
}
答案 2 :(得分:0)
尝试打印$_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html'
的输出以确保您到达正确的目录。