必要なjavascriptハンドラーのテンプレートツールキットで一重引用符をエスケープしたことはありますか?もしそうなら、あなたはそれをどのように行いますか。
[% SET s = "A'B'C" %]
<a href="/abc.html" onclick="popup('[% s | html_entity %]')">ABC</a>
html_entity二重引用符のみを処理するため、明らかに機能しません。それで、どうやってそれをしますか?
必要なjavascriptハンドラーのテンプレートツールキットで一重引用符をエスケープしたことはありますか?もしそうなら、あなたはそれをどのように行いますか。
[% SET s = "A'B'C" %]
<a href="/abc.html" onclick="popup('[% s | html_entity %]')">ABC</a>
html_entity二重引用符のみを処理するため、明らかに機能しません。それで、どうやってそれをしますか?
インライン化されたイベントハンドラーは使用しません。同じ理由でstyle、cssの属性の使用を拒否します。Jqueryを使用すると、外部ファイルでclass="foo"htmlとを簡単に実行できます。$('.foo').click( function () {} ).js
しかし、この質問に答えるために最善を尽くすために、コアにあるものについてはこれらのドキュメントをTemplate::Filterチェックしてください。
[% s | replace( "'", "\\'" ) %]一重引用符をエスケープするために、できるようです。または、関数呼び出しのみを許可する、より複雑なサニタイズJavaScriptパーサーを作成して、独自のTemplate::Filterを作成することもできます。
参考のための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
試すことができます:popup('[% s | html %]')。
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>
置換でスラッシュをダブルエスケープすることを忘れないでください。そうしないと、アポストロフィをエスケープすると解釈されます。
[% string.replace( "'", "\\'" ) %]