これはハマった。
よくCSVとかのファイルをアップロードするじゃないですか。
それを処理する場合、
//$uploadPath: アップロードされたファイル
mb_convert_encoding(
file_get_contents($uploadPath),
"UTF-8", "ASCII,JIS,UTF-8,CP51932,SJIS-win, EUC-JP,UTF-16"
);
とかあるじゃないですか。
Macの場合、これダメ。
CSVなので、元ファイルはExcelなどから出力されるものを想定しますが、もちろんその場合、文字コードはSJISです。
で、mb_convert_encodingする際、上記の例で言うと、SJIS-winに該当されません。
だから、UTF-8になりません。SJISのままで処理されます。
(SJIS-winは、いわゆるPHPの5C文字を含む拡張文字コード用ですね。)
ところが、
//$uploadPath: アップロードされたファイル
mb_convert_encoding(
file_get_contents($uploadPath),
"UTF-8", "ASCII,JIS,UTF-8,CP51932,SJIS-win"
);
だと、大丈夫です。SJIS-winを最期にすると、キチンと文字エンコードコンバートされます。
この問題は、恐らくMac OS X10.11.6 にした時から出たときからですので、
ローカルの開発環境で、突然インポート処理などが動かなくなった時はお試しあれ。
本番環境でも、CSVアップロードなどを想定する場合は、別にEUCとか、UTF-16とか、ある程度切っても大丈夫ですよね。。。
(多分)
終わり。