0

我正在尝试从在控制器中创建的 php 变量中显示一些 html 代码,例如

$this->template()->assign(array('html' => "<p>Ajith chandran</p>"));

但是当我在模板文件中编写 {$html} 时,此 html 代码呈现为普通文本并在浏览器中以完整代码显示它。我尝试了其他两种方式,例如

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

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

4

2 回答 2

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->template->escape_html = true;

在 Smarty 中:

{$html}

{php} echo htmlspecialchars($template->getTemplateVars('html')); {/php}

正如您在使用{php}标记时看到的那样,即使设置escape_html为 true,您也需要在 PHP 中转义数据,否则您将按设置显示数据。

于 2014-07-31T13:05:45.260 回答
0

$escape_html在 Smarty 中设置为 false 或使用{$html nofilter}

见:http ://www.smarty.net/docs/en/variable.escape.html.tpl

于 2014-07-31T13:16:22.453 回答