小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


mb_convert_encoding関数でUnable to detect character encodingというエラーが出る件

外部のサイトの情報をfile_get_contents関数を使って取得しようとしたときに、文字化けが発生しました。そのため、PHPで文字コードを変換方法を調べたら、mb_convert_encoding関数という便利な関数があることが分かりました。

string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
文字列 str の文字エンコーディングを、 オプションで指定した from_encoding から to_encoding に変換します。
PHP: mb_convert_encoding - Manual はてなブックマーク - PHP: mb_convert_encoding - Manual

Unable to detect character encodingの警告が出る

mb_convert_encoding関数を使って文字コードを変換しようとしたら以下のような警告が出ました。

Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in ファイル名

調べてみると、第3引数のfrom_encodingにautoが指定されている場合には、mb_language("Japanese");を呼び出す必要があるみたいです。

"AUTO" が効いていないようなのだ。

いろいろ調べてみる。

・php.ini の mbstring.language がうまく効いていないのか
mbstring.language = Japanese

なにはともあれ、毎回スクリプトの前に
mb_language("Japanese");
をいれるのが一番確実なようだ。
mb_convert_encoding(): Unable to detect character encoding in ・・・ 【PHP】 サイト構築,創る,WEB,ホームページ制作,サイト制作,WEBプログラミング - 創るmetaboy はてなブックマーク - mb_convert_encoding(): Unable to detect character encoding in ・・・ 【PHP】 サイト構築,創る,WEB,ホームページ制作,サイト制作,WEBプログラミング - 創るmetaboy

$html = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto');
ってやるとどうも auto がうまく効かないサイトがあって、文字化けしてしまう。
header("Content-type:text/html;charset=UTF-8");
に加えて
mb_language('Japanese');
を挿入したらとりあえず現状では文字化けしなくなった気がするので、いちおうメモ。
file_get_contents の文字化け対策 - 裏アドだらけの人生 はてなブックマーク - file_get_contents の文字化け対策 - 裏アドだらけの人生

上記サイトに書かれているように、mb_language("Japanese");を呼び出してみたら警告も出なくなり、文字コード変換もきちんと行うことができました。感謝です。