FuelPHPのFormクラスが勝手にaccept-charsetを付与する件

FuelPHPで内部文字コードと出力文字コードが違うケースを割とちゃんと対応する
で対応した際に、ちょっと躓いたことを。

Firefoxでは入力文字が正しくエンコードされているのにIEでは文字化けを起こす現象に遭遇。
原因を調べてみると、どうもFirefoxでうまくいっていたのはFormクラスでformタグを呼び出した際に自動で付与されるaccept-charsetっぽい。

そもそもaccept-charsetってあまりなじみないなーっ思ったのでW3Cのサイトを調べてみたらこんな説明が書いてあった。

accept-charset = charset list [CI]

This attribute specifies the list of character encodings for input data that is accepted by the server processing this form. The value is a space- and/or comma-delimited list of charset values. The client must interpret this list as an exclusive-or list, i.e., the server is able to accept any single character encoding per entity received.
The default value for this attribute is the reserved string “UNKNOWN”. User agents may interpret this value as the character encoding that was used to transmit the document containing this FORM element.
- Forms in HTML documents

要はサーバーサイド側の文字コードを指定する要素みたいなものかと。
そしてこれが利用できるブラウザは少ないらしい。。

色々調べてみると、案の定accept-charsetがIEでは無視されていることが判明。
この件について、クライアント側でどう回避するかについてはググればたくさん出てくるのだけど、
そもそもクライアント側に依存するような作りはよろしくないので、ここはクライアント側では対応せずにサーバー側で対応する事にした。

ちなみにaccept-charsetは、Formクラスのopenを利用すると必須の要素らしい。
(対象となる箇所が以下のように記載されているので、何かしらの値は入ってしまう。)

//
// fuel/core/form/instance.php  l.121~l.124
//
if (empty ($attributes['accept-charset' ]))
{
    $attributes[ 'accept-charset '] = strtolower(\Fuel:: $encoding);
}

なぜこのタグが必須となっているのかはさておき、
自動生成のタグは要素も含めてちゃんと知っておかないとなー