我正在尝试从在控制器中创建的 php 变量中显示一些 html 代码,例如
$this->template()->assign(array('html' => "<p>Ajith chandran</p>"));
但是当我在模板文件中编写 {$html} 时,此 html 代码呈现为普通文本并在浏览器中以完整代码显示它。我尝试了其他两种方式,例如
{php}echo $html;{/php} and <?php echo $html; ?>
但两者都没有显示任何内容。
你应该在 Smarty 中显示这个变量,简单地使用:
{html}
如果出于某种原因我需要使用{php}
我真正不推荐的标签(这是一种不好的做法,并且在 Smarty 3.1 中已弃用),您可以html
使用以下方法显示值:
{php} echo $template->getTemplateVars('html'); {/php}
当然,这两种语法都应该在 TPL 文件中使用,而不是在 PHP 文件中。如果您想在 PHP 文件中使用任何 Smarty 变量,您可能会在您的情况下使用:
echo $this->template()->getTemplateVars('html');
您还应该考虑此解决方案的安全性。您应该考虑转义输出或至少剥离一些标签。现在您可以设置<script>alert('I am a very bad script');</script>
为html
变量,用户将看到 JavaScript 警报。我假设您可能不知道您的html
变量将存储什么,并且 Smarty 默认情况下不会转义变量,这可能会导致您的网站出现严重问题。
因此,您可以使用例如:
{$html|escape:"html"}
{php} echo htmlspecialchars($template->getTemplateVars('html')); {/php}
安全地显示这些数据或使用全局设置escape_html为所有 Smarty 变量执行此操作:
在 PHP 中
$this->template->escape_html = true;
在 Smarty 中:
{$html}
{php} echo htmlspecialchars($template->getTemplateVars('html')); {/php}
正如您在使用{php}
标记时看到的那样,即使设置escape_html
为 true,您也需要在 PHP 中转义数据,否则您将按设置显示数据。
$escape_html
在 Smarty 中设置为 false 或使用{$html nofilter}