mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] ) は文字エンコーディングを変換する関数です。
mb_convert_encodingに潜む問題
第3引数の $from_encoding には変換前の文字エンコーディング名を指定しますが、ここを"auto"と指定しておくと、環境によっては
Warning: mb_convert_encoding(): Unable to detect character encoding
のようなエラーが発生し、文字エンコーディングの変換が失敗する場合があります。
ですので、"auto" は極力使わず、文字エンコーディングを指定することをおすすめします。
autoとphp.iniの依存関係
なぜこのようなエラーが発生するかというと、autoはphp.iniの言語設定によって挙動が変わってしまうからです。
"auto" が指定された場合、この文字列は 言語設定 (NLS) ごとに定義されたエンコーディングのリストに変換されます。たとえば、言語設定が Japanese の場合は "ASCII,JIS,UTF-8,EUC-JP,SJIS" です。
http://www.php.net/manual/ja/mbstring.supported-encodings.php
ちなみに言語設定はphp.iniのmbstring.languageに設定してあり、デフォルトは"neutral"が設定してあります。
mb_convert_encodingとうまく付き合うには
autoは使わない
autoは指定せずに適切なエンコーディングを指定しましょう。
autoを指定したい場合は代わりに、"ASCII,JIS,UTF-8,EUC-JP,SJIS"と設定しましょう。
php.iniを変更する
もしくは、php.iniに mbstring.language = Japanese を指定しておけばautoと指定した場合は"ASCII,JIS,UTF-8,EUC-JP,SJIS"として認識されます。
しかし、この方法はphp.iniとの依存関係が強くなるためあまりおすすめできません。
mb_language関数を使用する
php.iniを変更するのが難しい場合は、mb_convert_encodingの前に mb_language("Japanese"); と指定する方法もあります。