プロが教えるわが家の防犯対策術!

現在、携帯サイトの構築を行っています。
EUC-JPならば問題なく表示されるのですが携帯電話はShift-JISをサポート。
一応、EUC-JPも表示はされますがサポート外である事実は変わりません。
そこで、表示に関してはShift-JISで行いと考えています。
(全ての携帯がEUC-JPでも問題なく表示できる確証がない限り表示はShift-JISを考えています。)

しかし、今度はSmartyがShift-JISがサポート外。
普通にShift-JISを使うと文字化けを起こしたりエラーが表示されます。
PHPもShift-JIS、SmartyのテンプレートもShift-JISにすれば
とりあえずはPHPからの表示する文字に関してはShift-JIS表示できますが
Smartyテンプレートに直接書いた文字は文字化けを起こします。

自分なりに調べて
http://blog.livedoor.jp/alpha1280/archives/50225 …
http://www.knym.net/wiki/index.php?PHP%2FSmarty
のサイトを見つけて記事内に書いてあるPHPを利用してみました。
Smarty_Extends.phpをSmarty.class.phpと同じフォルダに作成して
テンプレートをShift-JISで作成、プレフィルタとポストフィルタのコメントを外して
Smarty_Extendsを利用して表示するPHPを作成↓
<?php
include_once('Smarty_Extends.php');

$smarty = new Smarty_Extends('templates','templates_c');

$smarty->assign("test", "Shift-JISによる表示だよ。必須");
$smarty->display("Enc_Shift-JIS.tpl");
?>
エラーは出なかったんですが従来通り文字化け、何度もテストしているんですが判りません。
SmartyでShift-JIS表示の経験がある方、上記の問題点や解決作の判る方。
お力を頂ければ幸いです、宜しくお願い致しますm(_ _)m

A 回答 (2件)

自分も同じように携帯サイトを作成する時にSmartyを使用しました。


丁度ag_noiseさんと同じようにShift-JISによる出力を調べて行っていましたよ☆
やはり行き着くサイトは皆同じ?私も上記二つのサイトは参考にしました。

そこで自分的な考えを少し述べると。。。
根本的にサイトに書いてある事とag_noiseさんがしたい事は全く別物だと思います(´・ω・`)
ag_noiseさんが書いたURLのサイトはSmartyのテンプレートをShift-JISで記述するためのもの、
ag_noiseさんのした事はShift-JISで出力。
似て非なるものなんじゃないかな?って思います(ノ∀`)

結論から言うと私が実践して成功した方法はアウトプットフィルタの使用です、
SmartyもPHPもEUCで作成、出力時のみShfit-JISに文字列を変換ってな感じですね!
「Smartyに書いた文字も成功するのか!」っと思うかもしれませんが成功しちゃいました。

//★アウトプットフィルタ用関数、Smarty出力時にEUCからShift-JISに変換する。
function SJIS_Encoding($tpl_output, &$smarty){
$tpl_output = mb_convert_encoding($tpl_output,'SJIS','EUC-JP');
return $tpl_output;
}

//呼び出し方:EUCからSJISへ変換出力
$smarty->register_outputfilter("SJIS_Encoding");

これで問題無くShift-JIS出力ができました。
まだあまり確認していないのですが(^^ゞ

環境に合わせてfire--さんのような処理をした方がいいかな?
もしかしたら失敗するかもしれませんが一応成功したって事で報告します。

携帯サイトは意外に製作が大変、EZgetやCRCチェックサムなどマジで面倒(´Д⊂グスン
その分色々考えたりして面白かったけどねヽ(゜∀゜)ノ
大変だと思いますが頑張って下さい(^-^)b
    • good
    • 0
この回答へのお礼

xeno-fieldさんの方法で成功しました、
まだ色々試してみますが問題なさそうです。
コードも載せて頂いてありがとうございます。
これで問題なくできそうです!
ありがとうございました。

お礼日時:2006/03/19 14:25

こちらも携帯向けのページを見直し中です。


smartyを使っていませんが、以下のようにして
出力をsjisにしてます。
smartyはphpの一部として動くので、うまく行く可能性が
あるのではないかと思います。

出力開始の前に以下の1行を入れるだけです。
ini_set('mbstring.http_output','SJIS');

この回答への補足

遅くなってごめんなさい、色々試してました。

ini_set('mbstring.http_output','SJIS');
ですがやはりSmartyとは考え方が違いますね、
Smartyに値を渡す時はEUCで、Smarty自身もEUCが基本。
Shift-JISなどで利用する場合はプレフィルタで変換してからテンプレートを使用、
最終的にポストフィルタを使いもう一度元のエンコードに戻す事からも
ini_set('mbstring.http_output','SJIS');だけでは無理かと。。。
PHPのみの出力なら簡単なんですがSmartyは奥が深い、
いやはや、やり甲斐があると言うか面倒と言うか。。。
回答して下さりありがとう御座いますm(_ _)m

補足日時:2006/03/17 00:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!