最終更新: 2008-07-19 (土) 08:00:28
このページをDeliciousに追加 このページをはてなブックマークに追加 このページをlivedoor クリップに追加 このページをYahoo!ブックマークに追加

Simplate を自動的に HTML エスケープさせる

目次

概要

Simplate の中の人のブログで simplateでデフォルトでhtmlspecialcharsを使ってみる という記事が公開されていますが、 それを参考に、エスケープを制御するためのパッチを作成してみました。

  • Flexy のように自動的に HTML エスケープさせることができます *1
  • エスケープに用いる関数をユーザーが設定できます
  • 部分的にエスケープをオフにするための記法を追加します

インストール

パッチファイル (simplate_escape.tar.gz) をダウンロードし、 Simplate のビルド時にパッチを適用して下さい。

$ ……
$ cd simplate-0.4.1
$ tar xvfz simplate_escape.tar.gz
$ patch < simplate-0.3.8_escape.diff
$ phpize
$ ……

Simplate のインストール手順そのものについては、 こちら のページを見て下さい。

設定

このパッチを適用すると、simplate クラスに次の2つのプロパティが追加されます。

  • escape_function
  • escape_options

パッチをあてただけの状態では、今までと同じ動作をします。 自動的に HTML エスケープの処理が行われるようにするためには、

$simplate = new simplate();
$simplate->escape_function = 'htmlspecialchars';
$simplate->escape_options  = 'ENT_QUOTES';

のように PHP のスクリプト内で設定して下さい。 この設定例の場合、テンプレート中の変数は、

テンプレートでの記述<{$var}>
コンパイル結果 (設定前)<?php echo $this->_tpl_vars['var']; ?>
コンパイル結果 (設定後)<?php echo htmlspecialchars($this->_tpl_vars['var'], ENT_QUOTES); ?>

のように展開されるようになります。

使い方

テンプレート中のある部分だけエスケープをオフにしたい場合は、

<{-$var}>

のように先頭にマイナス記号をつけて下さい。 また、Simplate は関数呼び出しによって、 Smarty でいうところの修飾子と同じことができるので、

<{-rawurlencode($url)}>

のように書けば、その他のエスケープにも対応できます。

 

エスケープに関して、注意事項をいくつか書いておきます。

  • マイナス記号は、ドル記号の前ではなく left_delimiter の直後に書いて下さい
  • エスケープは1つ1つの変数に対してではなく、デリミタで囲まれた範囲の出力全体に対して行われます *2

ダウンロード

履歴

日付更新内容
2008/03/07Simplate 0.3.8 以降用のパッチを追加
2007/06/19Simplate 0.3.5 以降用のパッチを追加
2007/05/12初公開
*1 一応 Smarty でも default_modifiers を使えば似たようなことはできます。
*2 Smarty は恐らくこの辺を誤解しており、配列でもなんでもエスケープしようとしてエラーを吐いたりします。

(Counter:1, Today:1, Yesterday:0)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS