FuelPHPで文字化けーアップロードファイル名とメール添付ファイル名

FuelPHPをUbuntu上で作成してWindows環境(Win2003、IIS6)に納品した結果、

Windowsのクライアントからファイルアップロードするとアップロードされたファイル名が文字化けしている!

(PHPの内部エンコードがUTF-8だけどWinがShift-JISだから)

→アップロードは送信メールに添付したいがためにしているだけなので文字化け解消しなくても良かったのですが、後でアップロードフォルダ内の整理や確認等人力で行う場合に視認性が悪いので無理やり対応。

FuelPHPのUpload::save()を行う前に

ってやってアップロードファイル名をエンコードする。

弊害としては本来は内部エンコードのまま処理が進むはずだったので、同名ファイルが有る場合に枝番を付加する処理なんかが正常に動作しなくなる。

これでWindowsサーバーのフォルダに読める文字のファイル名でアップロードされる。

最初エンコードをSJISにしてたけど、CP932にしたら、①みたいなMS拡張の機種依存文字も大丈夫になった。

本当はもっとスマートな方法が欲しかったんだけど、ファイルを置くところの処理がCoreファイルで作られていて入り込む余地が無いように思えた。それとも   

とかやったら良かったのかな?

文字化け状態でアップロードされたファイルをメールの添付に加えると添付ファイル名も文字化け!

(ま、そりゃそうですね)

→上記1の結果を受けてメール送信のメソッドに引数として添付ファイル名を渡す。その処理は何も加工しない。

メール送信用のメソッドの中で、引数で受け取った添付ファイル名をFuelPHPのmailに渡す処理を加工

それでも、メールヘッダがISO-2022-JPなので、機種依存文字の類はメールを受信した時に「?」とかになってるけど、それはしょうがないよね。

メールの件名が文字化けすることがある!

→犯人は半角カナ。使わないで!件名はFuelPHP側で送信時にISO-2022-JPに変換してるっぽいので、mb_convert_kana関数使って件名に含まれている半角カナを全角に変換して誤魔化す。

以上、うんこメモでした。