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



Angelic Wing, 9 月 20th, 2006 at 11:01 [Trackback]
[PHP symfony] SymfonyのFillin機能で日本語が〜…
http://www.sooey.com/journal/2006/09/11/629/ずっと調べようとして放置していた
「SymfonyのFillIn機能で日本語が実体参照になってしまう」
という件。
せめて、実行している環境とかバージョンは書…
ray, 10 月 6th, 2006 at 09:21 [Comment]
はじめまして。私もこれに困っていたんですが(PHPの設定を変えても意味無く)、
http://ishikawa.arielworks.com/memo/2004/12/20
を参照しまして、もしやと思い $save->HTML() を $save->XML() に変えてみたところ、実態参照に変換されなくなりました。また、 $save->HTML ですと が に変えられてしまうんですが、こちらも変換されなくてすみました。内容がXHTMLでも大丈夫みたいですね。
いしなお!, 10 月 31st, 2006 at 16:04 [Trackback]
PHPのDOM APIで日本語が数値文字参照に変換される問題…
SymfonyのFillIn機能で日本語が実体参照になってしまうの問題と同一で、DOM APIを使ってXML(XHTML)をいじると、出力(saveXML())に含まれる日本語が数値文字参照になってしまう問題に遭遇中…
eringi blog, 1 月 30th, 2007 at 00:13 [Trackback]
SymfonyのFillIn機能で日本語が実体参照になってしまう…
SymfonyのFillIn機能で日本語が実体参照になってしまう問題の続き - ……