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の属性の使用を拒否します。Jqueryを使用すると、外部ファイルでclass="foo"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

試すことができます:popup('[% s | html %]')

于 2011-01-18T10:20:48.807 に答える
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 に答える
0

置換でスラッシュをダブルエスケープすることを忘れないでください。そうしないと、アポストロフィをエスケープすると解釈されます。

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