テンプレートエンジン作りたい

いちおうまとめておきます。先週末の NanoA のテンプレートエンジン - kazuhoのメモ置き場 は妥協の産物で、本当は、

  • なぜ、いちいちエスケープを手動で指定しなければいけないのか
  • 文脈によって、自動的にエスケープ手法は決定できるはず

と思ってます。言うまでもないかもしれませんが。たとえば以下の例。

こんにちは、<?= username ?>さん
<a href="/user?id=<?= userid ?>">マイページ</a>

前者は、 HTML encode するのが正しく、後者は、URI escape した後に HTML encode するのが正しい。そして、どのようなエスケープ手法を組み合わせるべきかは、テンプレートエンジンレベルで判別できること。反論としては、「テンプレートエンジンが重たくなる」というものがあり得るが、それはテンプレートをパースして実行形式に変換する際の問題。つまり、今日のコンパイルキャッシュの使用を前提とするテンプレートエンジンでは、問題にならない。

むしろ、エスケープの明示的な指定が (原則) 不要になることによる安全性の向上や、テンプレートエンジンレベルでの HTML 構文エラー検出による生産性向上が得られるんじゃないか。