1

我正在使用 Template::Toolkit 来构建我的页面。我在页面上有一个链接列表,每个链接都使用 Jquery 工具触发覆盖。我想将一些 CGI 变量传递给它,但它表现得很奇怪。我在模板中的代码是:

[% FOREACH dvd IN dvd_chart %]

<div class="thumbnail">
<a href="popup.pl?overview=[% dvd.overview %]" rel="#overlay" style="text-decoration:none"><img  src="[% dvd.thumbnail %]" /></a>
<br />

</div>
[% END %]

问题是概述并没有进入叠加层。事实上,覆盖显示为空白。如果我更改字符串的模板变量,该字符串确实会出现在模板中。有谁知道是否需要进行一些转义才能传递模板变量?顺便说一句,[% dvd.overview %] 变量是有效的,因为我可以将它转储到屏幕上并查看字符串。

4

1 回答 1

0

模板工具包有针对这种情况的内置过滤器(特别是 html 和 html_entity )。特别是在此处使用它们是一个好主意,因为即使未转义的内容正确呈现,正如您提到的,这些是从客户端传递的 CGI 变量。渲染未转义的客户端提供的数据是危险的。

下面是一个示例,说明如何适当地逃避,而不会用多余的代码弄乱您的业务逻辑。只需添加| html到变量输出。

[% FOREACH dvd IN dvd_chart %]

<div class="thumbnail">
<a href="popup.pl?overview=[% dvd.overview | html %]" rel="#overlay" style="text-decoration:none"><img  src="[% dvd.thumbnail |html %]" /></a>
<br />

</div>
[% END %]
于 2015-07-10T13:15:16.343 回答