【追記 2015年2月9日】
文字化け対策で、mb_convert_encoding関数に渡す漢字コードは’SJIS’ ではなく、’SJIS-WIN’ ( ‘CP932’) を使えとのお達し。ごめんなさい(m_m)
【追記ここまで】
年初からなんやかんやと忙しく更新する時間が取れないので、放置状態でした(ーー;;
ここ一ヶ月、年度末でなかなかの作業量。
備忘録のメモです。
外注している、SJISで組まれたPHPスクリプトをヘッダとフッターを変えUTF-8にする、という簡単な仕事。時間が迫っているので、外注先に投げる時間がない。ヘッダとフッタを変えてスクリプトファイルの文字コードをUTF8にしただけでは、文字化けしてしまう。そりゃ当然、 データーベースに保存されているデータはSJISのままなんだから・・・。
しかもデーターベースには手が出せない。それに外注先のスクリプトをこちらで勝手にいじると、まずい。何かと問題がある。
というわけで・・・
元のPHPスクリプトファイルを XXXX-sjis.phpのようにして、XXXX.phpから以下のようにしてXXXX-sjis.phpを読み込んでエンコード変換して出力することで、一応解決。
<?php //XXXX-sjis.php echo 'これはSJISファイルスクリプト'; ?> <?php // XXXX.php $sjis_contents = file_get_contents('http://host/XXXX-sjis.php'); echo mb_convert_encoding($sjis_contents,'UTF-8','SJIS');
本当は以下のように、元のファイルに出力バッファリング・ハンドラを追加すれば解決するんですが・・・元のファイルはあまりいじりたくないので・・・(^^;;;;
<?php function output_handler($buf) { return mb_convert_encoding($buf,'UTF-8','SJIS'); } ob_start('output_handler'); //XXXX-sjis.php echo 'これはSJISファイルスクリプトですが、出力はUTF-8になります。 ob_end_flush(); ?>
とりあえずの応急処置・・・でなんとか切り抜けた(^^ゞ
でも・・・わざわざfile_get_contents関数なんて使わないで、requireすれば良かったのか????
<?php // XXXX.php function output_handler($buf) { return mb_convert_encoding($buf,'UTF-8','SJIS'); } ob_start('output_handler'); require 'XXXX-sjis.php'; ob_end_flush();
まぁ、いいや。