SymfonyのFillIn機能で日本語が実体参照になってしまう

2007年9月13日追記

本エントリ中の「実体参照」の部分は正しくは文字参照とすべきでした。


このところSymfonyでの開発がメインとなっているのですが、日本語サイトを構築するにあたってちょっと厄介な問題に直面しています。

Symfonyには、フォーム入力値にバリデーションエラーがあった場合に入力値を再表示されたフォームに自動設定してくれるFillinという機能があります。

これがなかなか便利なのでどんなメカニズムなのかを気にすることもなく使っていたんですが、ある日ブラウザでソースを表示してみて驚き!Fillinが作動した後のHTML(XHTML)では日本語がすべて実体参照に置き換えられていました。このままではどうにも気持ち悪いのでSymfonyのlib/filter/sfFillInFormFilter.class.phpを眺めてみたら、テンプレートファイルをDOM関数でパース&HTMLとして出力ということをやっているんですな。その後、色々と調べてみたんですがDOMDocument->saveHTML()で「UTF-8なXHTMLに含まれる日本語」をそのまま返す方法は無さそうな感じ。

Symfonyを使っている方々はどう対応しているんでしょう?見なかったことにしてる?

ちなみにFillIn機能を通る前のソースは以下の通り。

FillIn前のソース

そして、FillIn機能が有効な状態でバリデーションに引っかかったり確認用アクションからforward()メソッドで戻ってきた場合は、以下のようなソースがブラウザに返されます。

FillIn後のソース