我试图从像
这样的控制器中创建的php变量中显示一些html代码$this->template()->assign(array('html' => "<p>Ajith chandran</p>"));
但是当我在模板文件中写{$ html}时,这个html代码呈现为普通文本并在浏览器中显示完整代码。我在其他两个方面尝试过这个
{php}echo $html;{/php} and <?php echo $html; ?>
但两者都没有显示任何内容。
答案 0 :(得分:1)
您应该使用简单的方法在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-&gt; template-&gt; escape_html = true;
在Smarty:
{$html}
{php} echo htmlspecialchars($template->getTemplateVars('html')); {/php}
正如您在使用{php}
标记时看到的那样,即使将escape_html
设置为true,您也需要在PHP中转义数据,否则您将在设置时显示数据。
答案 1 :(得分:0)
在Smarty中将$escape_html
设置为false或使用{$html nofilter}