絵文字を表示する上で設定に四苦八苦。
ようやく表示できたので、その設定をメモ。

・Ethna含めプログラムソースはEUCで書く
・ただし、テンプレートは絵文字ツールのSJISバイナリを扱うのでSJISで書く

[Linux]

php.iniの設定

output_buffering = On
output_handler = mb_output_handler

default_charset = Shift_JIS

mbstring.language = Japanese
mbstring.internal_encoding = eucJP-win
mbstring.http_input = auto
mbstring.http_output = SJIS-win
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

※eucJP-win, SJIS-win は絵文字を壊さず変換するらしい

これで通常のEUC⇒SJIS設定の完了。

このままだと、SJISで書いてるテンプレート(HTML)が化けてしまうので
次にEthnaの設定。
ここではアプリケーションIDをwebappとする。

※尚、Webappと大文字で始まっているのは
※Ethnaが1文字目を大文字として扱うから

Ethnaが利用するSmartyの出力フィルタを作成

ここでは、ファイル名を仮にsmarty_outputfilter_encode.phpとして新規作成し
以下を記述。
作成場所はWebapp_Controller.phpと同じディレクトリで構わない。


function smarty_outputfilter_encode($output, &$smarty)
{
return mb_convert_encoding( $output, "eucJP-win", "SJIS-win" ) ;
}

入力文字コードがSJIS-win、変換文字コードがeucJP-winとなる。
ま・・・動作を理解してないんですけど、php.iniの設定と兼ね合えば

テンプレート(SJIS)→(EthnaのSmartyフィルタでSJIS-win⇒eucJP-win変換)→(php.iniのエンコーディングでeucJP-win⇒SJIS-win変換)→WEB表示

だから表示されるのか、と。

最後に、出力フィルタをWebapp_Controller.phpに読み込み、設定。

require_once 'smarty_outputfilter_encode.php';

var $smarty_outputfilter_plugin = array(
'smarty_outputfilter_encode'
);


SJISで書かれたHTMLも、絵文字ツールで入力した絵文字も
これで正常に表示されると思います!

以上は静的なコンテンツの場合ですが
$_GET, $_POST入力のSJIS-win, eucJP-winフィルタは

http://ethna.jp/ethna-document-dev_guide-app-sjis.html

を参考。