小金井にあるWEB制作会社の備忘録

MEMORANDUM

PHPの「mb_detect_encoding」を使って読み込みファイルのエンコード処理

外部ファイル(CSVファイル等)を読み込んでサイト内に表示する際に、保存時の文字コードが異なる場合に文字化けになることがあります。
毎回、制作者が調整できれば良いですが、担当が変わっても問題なく処理できるよう、自動で文字コードの変換を行う方法をメモ。

PHP

$fileName = '○○○○.csv';
$fp = fopen($fileName, 'r');

$ary = array('UTF-8', 'eucJP-win', 'SJIS-win', 'ASCII', 'EUC-JP', 'SJIS', 'JIS');

while($line = fgetcsv($fp)) {
			
	$encoding = mb_detect_encoding($line[1], $ary, true);
			
	if($encoding != 'UTF-8'){
					
		echo(mb_convert_encoding($line[0], 'UTF-8', $encoding));
		echo(mb_convert_encoding($line[1], 'UTF-8', $encoding));

	}else{

		echo($line[0]);
		echo($line[1]);

	}

}
fclose($fp);

「mb_detect_encoding」は初期状態では判別できる文字コードの種類が少ないので、第二引数に独自配列($ary)を追加してから判別。
参考例はCSVファイルを読み込み、「UTF-8」形式でない時にのみ、「UTF-8」に変換して表示しています。

同一カテゴリーの記事