LoginSignup
1
1

More than 5 years have passed since last update.

mb_convert_encodingについて第2引数の補足(Mac OS X10.11.6)

Posted at

これはハマった。

よく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とか、ある程度切っても大丈夫ですよね。。。
(多分)

終わり。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1