formのenctypeにmultipart/form-dataを指定すると文字化けする際の対処法

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がこの世から消えるのにあと何年かかるのだろう。

タイトルとURLをコピーしました