Phpfox从php变量显示html

时间:2014-07-31 13:01:44

标签: php html smarty phpfox

我试图从像

这样的控制器中创建的php变量中显示一些html代码
$this->template()->assign(array('html' => "<p>Ajith chandran</p>"));

但是当我在模板文件中写{$ html}时,这个html代码呈现为普通文本并在浏览器中显示完整代码。我在其他两个方面尝试过这个

{php}echo $html;{/php} and <?php echo $html; ?>

但两者都没有显示任何内容。

2 个答案:

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

请参阅:http://www.smarty.net/docs/en/variable.escape.html.tpl