あーさーの備忘録

ゆっくり自由に生きてます

ファイルアップロードの際に文字化けする問題を解消する

あるサーバー

私の環境ではないが、 CORESERVER あるサーバーで、「ファイルアップロードの際にファイル名からフィールド名まで文字化けしてしまう」という問題が発生したので、解消するためのメモ。

文字コードがおかしい?

最初はmb_internal_encodingが違う値なのかなぁとか適当に考えて文字コードを変換して見たが、上手くいかない。まず、文字化けの仕方がいつも見慣れるようなタイプではないので、何から何にエンコードされているのかが分からない。メジャーな文字コードの組み合わせで試してみても、同じような文字化けを再現できませんでした。

困ったときのphpinfo()

ということで、phpinfo()の結果を、自分の環境と比べてみた。狙いをmbstring系に絞って差分を取ってみると、いかにも怪しそうな名前の設定が見つかった。

mbstring.http_input = auto;

mbstring.encoding_translationとは

mbstring.encoding_translationというものがあるらしく、$_POST$_GET文字コードを、スクリプト上で変換しなくても自動でやってくれるらしい。正直自分でやるから勝手にやらないでほしい。とりあえずinputの場合だけ書き換えてみる。

mbstring.http_input = "pass";

デフォルト値に戻してみた。すると、文字化けも直った。やったぜ。

ちなみにこの設定は古いものらしく、PHP5.6~は非推奨になっている。とりあえず空にしておけばいいらしい。

PHP: 実行時設定 - Manual