4

您是否曾经在模板工具包中为必要的 javascript 处理程序转义单引号?如果是这样,你怎么做。

[% SET s = "A'B'C" %]

<a href="/abc.html" onclick="popup('[% s | html_entity %]')">ABC</a>

html_entity显然不起作用,因为它只处理双引号。你是怎么做到的?

4

5 回答 5

8

我不使用内联事件处理程序——出于同样的原因,我拒绝将style属性用于 css。class="foo"Jquery 只是使在 html 和$('.foo').click( function () {} )外部.js文件中的操作变得容易。

但是,为了尽我所能回答这个问题,请查看这些文档以Template::Filter获取核心文档。

似乎您可以[% s | replace( "'", "\\'" ) %], 转义单引号。或者您可能会编写一个更复杂的净化 javascript 解析器,它只允许函数调用,并制作您自己的Template::Filter

于 2010-06-07T15:26:16.980 回答
3

2018年更新供参考:

TT 有一个方法,称为 squote 用于转义单引号和 dquote 用于双引号。

[% tim = "Tim O'Reilly" %]
[% tim.squote %]          # Tim O\'Reilly

有问题的链接将类似于:

<a href="/abc.html" onclick="popup('[% s.squote %]')">ABC</a>

http://www.template-toolkit.org/docs/manual/VMethods.html#section_squote

于 2018-02-25T10:10:30.103 回答
1

Perl 不是我最擅长的语言……但是!

我发现最简单的方法是使用该JSON模块。在一个名为JS.pm或什么的模块中:

use JSON;

sub encode () {
   my $self = shift;
   my $string = shift;

   $json = JSON->new->allow_nonref;

   return $json->encode( $string );
}

更多信息:http ://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm

然后在您的模板中:

[% use JS; %]

<script>
  var escaped_string = [% JS.encode( some_template_variable ) %];
</script>
于 2014-11-20T16:39:57.240 回答
1

你可以试试:popup('[% s | html %]')

于 2011-01-18T10:20:48.807 回答
0

记得在替换中对斜线进行双重转义,否则将被解释为转义撇号。

[% string.replace( "'", "\\'" ) %]
于 2016-07-14T19:30:38.013 回答