前回の続き
1 |
$str = mb_convert_encoding($_POST["test"], "UTF-8", "ASCII"); |
ってやっても表示が変わっただけで文字は化けたままでした。
「テスト」という文字が
テスト
ってなってました。
もしやと思い、HTML QuickFormを使わずに無事表示出来た方のHTMLソースを見てみると画面上では「テスト」と表示されているものが、ソースでは「テスト」と表示されていました。
&#から始まるこの文字列は文字参照というものらしいです。
1 |
$str = mb_convert_encoding($_POST["test"], "UTF-8", "HTML-ENTITIES"); |
こうするとちゃんと表示されるらしい。
でもこれじゃ確認画面でのフォーム内の文字列は変わってなかった。
おそらく、HTML QuickForm自身が中で保持してる値を弄ってあげないとダメなのかもしれない…
$form->applyFilter('__ALL__', 'Class_Name::method_Name');
で、Class_Nameというクラス内に作ったmethod_Nameというメソッドに要素全部飛ばして
1 2 3 4 5 6 7 8 9 10 11 12 |
public static function method_Name($str){ foreach($_POST as $key => $val){ if('text' == Option::$form->getElementType($key) || 'textarea' == Option::$form->getElementType($key)){ $el = Option::$form->getElement($key); $el->setValue(mb_convert_encoding($val, "UTF-8", "HTML-ENTITIES")); } } return mb_convert_encoding($str, "UTF-8", "HTML-ENTITIES"); } |
returnのとこのmb_convert_encodingやらないと全角カタカナで入力してくださいってルールに引っかかる。
フォームにはちゃんとカタカナで入力されてるように表記されてるのに…。
これでやっと動くようにはなったけど
このやり方が正しいとはとても思えない…w