2016/09/26 追記:
以下の方法を試す前に、php.iniの”mbstring.http_input”が”pass”になっているか確認すること。
これで解決する事があります。
サーバー移転を行いPHPのバージョンが上がった際に、ファイル添付を行うフォームに入力した文字が化けるという問題が発生した。
ファイル添付を行わないフォームに関しては問題が無く、php.iniのmbsreing関連の設定も全く同じにしていた。
違いといえば、formタグでenctypeを指定しているかどうか。
このenctypeというのは、“ファイルを送るおまじない”というものらしい。
enctype=’multipart/form-data’ってなんだ?
http://mugenup-tech.hatenadiary.com/entry/2014/08/28/100910
これを取り除くわけにはいかない。
さらに調べました。
MULTIPART/FORM-DATAで文字化け
http://katakata.jp/?p=10
HTML QUICKFORMで作成したFORMでENCTYPEにMULTIPART/FORM-DATAを指定する。
http://katakata.jp/?p=28
つまり、対処法は
<fomr accept-charset="ASCII">
<?php
$str = mb_convert_encoding($_POST["hoge"], "UTF-8", "HTML-ENTITIES");
?>
以上、これで無事解決できました。
しかし、根本的な原因が分かったわけで無いので若干モヤモヤしています。
2016/04/13 追記:
しかし、これだけでは不十分だった。
accept-charsetがIEで使えない。IEでForm送信するためには・・・
http://ameblo.jp/chamasd/entry-10650081813.html
確かに駄目でした…。
inputのsubmitにonclick=”document.charset=’ASCII’;”を追加して完了。
IEがこの世から消えるのにあと何年かかるのだろう。