PHP研究
9.print文やecho文
printや、echoは文字列などを画面に出力するときの定番だが、
内部コード(つまりスクリプトファイルの文字コード)と
出力コード(画面に出力するときの文字コード)が
違う場合(たとえば2.SJISのような出力コードを指定したときなど)、
どうやら出力時に文字コードを変換するらしい。
大変ありがたい気がするのだが、
実は落とし穴がある。
file()でサーバに保存してあるデータを開いて
その内容をprintしようなどというとき、
たとえば、
データファイル→SJIS
スクリプトファイル→EUC
出力→SJIS
とされていたとすると、
データファイルをEUCだと思い込み(なぜならスクリプトファイルがEUCだから)、
わざわざあらためてSJIS変換をしてしまう。
当然文字コードがおかしくなって、文字化けが発生する。
そこで、一回EUCに変換してからprint文・echo文に渡しちゃう。
mb_http_output('SJIS');
ob_start('mb_output_handler');
$str = file("log..log"); //←とりあえずこのファイルは1行しか保存されてないと仮定
//$strの文字コードをShift-JISからEUCに変換してからプリント(でSJISになる)
print mb_convert_encoding($str, "SJIS", "EUC-JP");
最後のmb_convert_encoding()が変換関数。PHP4です。