CakePHP1.3にしたらau機種(一部)の文字化けで悩んだ
ケータイ向けサイトをcakePHPで作っています。
絵文字を変換するために、HTML_Emojiというライブラリを利用させてもらっているのですが、1.2.5から.1.3.2にバージョンアップしたところ、フォームで渡される文字列が文字化けし始めました。なぜ??と思って、少しハマっていたところ、Formヘルパのcreateが出力する文字列が違うことに気がつきました。
//1.2.5では、 $form->create('User',array('action'=>'confirm',,'url'=>array('?'=>'guid=on'))); //とすると <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on"> //となると思います。(div,inputは省略) //1.3.2では $form->create('User',array('action'=>'confirm',,'url'=>array('?'=>'guid=on'))); //すると、出力が <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on" accept-charset="utf-8"> //となります。
「accept-charset」??
そして、accept-charsetを入れると、UTF8をサポートしていない(と思っていた)auも、mb_detect_encodingで調査するとフォームからUTFで返すようでした。(URBANO BARONEで検証、でもW61Pは文字化けしなかった。)
そこで、ググってみると、CookBookのimprovementsにこうありました。
Forms now get an accept-charset set automatically, it will match the value of App.encoding, it can be overridden or removed using the 'encoding' option when calling create().
// To remove the accept-charset attribute. echo $this->Form->create('User', array('encoding' => null));
ということで、
$form->create('User', array('action' => 'confirm','encoding'=>null,'url' => array('?' => 'guid=on'))) //出力 <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on">
めでたくaccept-charsetが消えて、文字化けも解消されました!
ケータイ向けにサイトを作成しているみなさま、お気をつけくださいまし!