[PHP-users 14073] includeするファイルを文字コード変換

MT php-users@php.gr.jp
Tue, 18 Mar 2003 20:42:15 +0900


文字コードに関する質問は頻出かと思いますが、
どうにも解決できません。

アパッチ+php4で レンタルサーバーでcgiとして稼動中の環境です。

DBの文字コード、phpの内部コードはEUC、出力はShift_JIS です。
phpinfoで調べたサーバーの設定ではmb_http_output 等は未設定です。
何らかのコードには固定されていません。

共通で読み込む設定ファイルに
ini_set("output_buffering","on");
ini_set("output_handler","mb_output_handler");
ini_set("mbstring.http_input","auto");
ini_set("mbstring.internal_encoding","EUC-JP");
ini_set("mbstring.http_output","SJIS");
mb_http_output('SJIS');
ob_start('mb_output_handler');

とかいて、上記環境はクリアできていました。

問題はincludeで読み込んだテンプレートファイルがShift_JISで
内部コードEUCとしているのとあわないためか、
c?c?c? ??? と はてなが多い目の文字化けして表示されます。

<< index.cgi >>
$carrier = CheckBrowser(); //user_agentを調べる

// 端末ごとのファイルをロード
switch($carrier)
{
	case 'imode':
		include("/home/i/index.html");
		break;
	case 'jsky':
		include("/home/j/index.html");
		break;
	case 'ezweb':
		include("/home/e/index.hdml");
		break;
	case 'pc':
#		header("Location: http://php.jp/index.html"); //pcはpc用のページへ
		break;
}

各ケースでそれぞれの端末にあったテンプレートファイルを読み込みます。
テンプレートに指定してるindex.html 等は htmlが記述されたファイルに
<?php ... ?> でコードを埋め込んでいて、実質cgiファイルです。

nkf でパイプしながらincludeしたりできないかなと思うのですが、そのやり方がわかりません。
fopen で開いて文字コードを変更するのはできそうですが、それをcgiファイルとして実行する
やり方がわかりません。

テンプレートに指定してるファイルはHTMLコーティング担当者やデザイナーが作成したままの状態
Shift_JISのままにしておきたいです。

<?php ... ?>のブロックにはあらかじめ作成した関数の呼び出しだけを行う感じです。

解決方法をご教授ください。
よろしくお願いします。

-- 
MT <akc@mutt.freemail.ne.jp>