いつかのIE6とCakePHP1.3と文字化け

CakePHPもとうとう1.3になってしばらく期間が経ったので使ってるとHTMLフォームから送信された文字がIE6で文字化けしてた。
CakePHPはプログラムの内部エンコーティングを「/app/config/core.php」の「App.encoding」で指定出来るけど、1.3ではデフォルトでそこで指定した文字コードでHTMLフォーム中の文字列を送信するようにシステムが改善されてた。
具体的には「/app/config/core.php」中にて

	Configure::write('App.encoding', 'UTF-8');

とかって設定してた場合、view中で

<?php e($this->Form->create('[コントローラ名]', array('url'=>'[コントローラ名]/[アクション名]'))); ?>

とかすると出力されるHTMLはデフォルトで

<form method="post" action="[コントローラ名]/[アクション名]" accept-charset="utf-8">
</form>

となり、formタグ中に「accept-charset="utf-8"」のプロパティが付加される。
が、
この「accept-charset="utf-8"」なんてプロパティはIEは認識してくれません。
フロントはShift-JISでシステム内部はUTF-8でなんてやった場合は、FirefoxからはUTF-8で受け取れるのにIE6からはShift-JISで受け取ってしまう・・・という事に。
対応策としてはまずはformタグ中に「accept-charset="utf-8"」のプロパティを付加しないようにする。

<?php e($this->Form->create('[コントローラ名]', array('encoding'=>null, 'url'=>'[コントローラ名/アクション名]'))); ?>

とすると、HTMLフォームからはページの文字コードにてそのままフォーム中のデータが送信されてくるので、あとは好きなサーバ処理中のタイミングで手動でエンコードしてやればいい。


ie