Smarty 文字化け

  • いまさらながらSmartyの文字化け処理をば。
  • フィルタプラグインを処理することで対処できます。
  • テンプレートをEUCで作成、以下のファイルもEUCで作成、出力はSJISで、という場合は出力前のソースの文字コード変換をします。
  • なぜEUCSJISなのかは聞かないで下さい。UTF-8SJISとかはありそうだけど。
  • 文字コードのお勉強が必要ですが今のところ目の前の問題を処理するだけで精一杯。。
  • EUCtoSJISwin_Encoding関数は自作のコールバック関数です。詳細はSmarty.class.phpのコードを読めば分かります。引数はSmartyにおけるプラグインの定型です。
  • 関連記事
<?php
ini_set('display_errors','On');
require_once("./Smarty/libs/Smarty.class.php");

$smarty = new Smarty;
$smarty->template_dir = './Smarty/libs/templates/';
$smarty->compile_dir = './Smarty/libs/templates_c/';
$smarty->config_dir = './Smarty/libs/configs/';
$smarty->cache_dir = './Smarty/libs/cache/';


$test = '漢字のテスト';
$smarty->assign("test", $test);
$smarty->register_outputfilter('EUCtoSJISwin_Encoding');
$smarty->display("default.tpl");

function EUCtoSJISwin_Encoding($tpl_output, &$smarty){
	$tpl_output = mb_convert_encoding($tpl_output,'sjis-win','EUC-JP');
	return $tpl_output;
}

//print "<pre>";
//print_r(__FILE__);
//print "<br>";
//print_r($smarty);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=sjis-win">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>これはテストです</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE border="1" width="" cellpadding="0" cellspacing="0" bgcolor="#ffffff">
  <TBODY>
    <TR>
      <TD>aaa{$test}</TD>
    </TR>
  </TBODY>
</TABLE>
</CENTER>
</BODY>
</HTML>