絵文字を表示する上で設定に四苦八苦。
ようやく表示できたので、その設定をメモ。
・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
を参考。
ようやく表示できたので、その設定をメモ。
・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
を参考。