EUCエンコードのPHP + SmartyでSJIS(Shift_JIS)出力する方法(モバイルページなど)
2006年12月25日Table of Contents
PHPのテンプレートエンジンで便利なSmarty。
テンプレートをSJISで作るともちろん文字化けが発生する。
PHP(EUC) + SmartyTemplate(SJIS)で文字化けさせずに表示させるメモ。
想定環境
- php.ini
-
- mb_string.language = Japanese
- mb_string.internal_encoding = EUC-JP
- mb_string.http_input = auto
- mb_string.http_output = EUC-JP
- PHPソースは、EUCで作成
- Smarty Templateは、EUCで作成
sjis_output.php
- 外部ファイルを読み込む場合などは全てEUCで
<?php /* Smarty Include */ require_once('Smarty/Smarty.class.php'); /* mb_string.http_output 変更 */ mb_http_output('SJIS'); $output_page = new MySmarty(); /* Smarty テンプレートをコンパイル前にSJISへ変換 */ $output_page->register_prefilter("convert_encoding_to_eucjp"); /* Smarty使用テンプレートをEUCへ統一 */ $output_page->register_postfilter("convert_encoding_to_sjis"); //表示 $output_page->display("xxxx.tmpl"); /** * テンプレート文字コードSJIS変換 **/ function convert_encoding_to_eucjp($template_source, &$smart) { if (function_exists("mb_convert_encoding")) { $enc = mb_detect_encoding($template_source, "auto"); if ($enc != "EUC-JP") { return mb_convert_encoding($template_source, "EUC-JP", $enc); } return $template_source; } } /** * テンプレート文字コードEUC変換() **/ function convert_encoding_to_sjis($template_source, &$smart) { if (function_exists("mb_convert_encoding")) { return mb_convert_encoding($template_source, "SJIS", "EUC-JP"); } return $template_source; } ?>
Smarty マニュアル
>> register_prefilter
>> register_postfilter
>> register_outputfilter