• ベストアンサー

SmartyでのShift-JIS使用

現在、携帯サイトの構築を行っています。 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/50225918.html 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

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

ag_noise
質問者

お礼

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

その他の回答 (1)

  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

こちらも携帯向けのページを見直し中です。 smartyを使っていませんが、以下のようにして 出力をsjisにしてます。 smartyはphpの一部として動くので、うまく行く可能性が あるのではないかと思います。 出力開始の前に以下の1行を入れるだけです。 ini_set('mbstring.http_output','SJIS');

ag_noise
質問者

補足

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

関連するQ&A

  • Shift_JISが選ばれてしまう

    韓国語のサイトを作成したのですが 文字コードを「euc-kr」にして作成しました。 しかし、実際にページを開くと「Shift_JIS」 が選ばれてしまい、文字化けが起きてしまいます。 <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> 上記のような記述なのですが 何か問題がありますでしょうか。 また、その他考えられる原因がありましたら 知恵をお借りできれば幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • Smartyでテンプレートが読み込めない

    下記のソースを実行すると、テンプレートが読み込めずエラーになってしまいます。 うーん、何故なのか分からず困っております。 phpのバージョンは4.4.6なのですが、Ver5以降でないとサポートされないのでしょうか。 [source] <?php require_once("Smarty.class.php"); class MySmarty extends Smarty { function _MySmarty() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; } } $o_smarty=new MySmarty(); $o_smarty->display("hello.tpl"); ?> [error message] Warning: Smarty error: unable to read resource: "hello.tpl"

    • ベストアンサー
    • PHP
  • [PHP+MySQL]DBがEUC,出力はSHIFT-JIS・・・どうクリアするか?

    こんにちは。 PHPとMySQLで携帯向けのコンテンツを作成しています。 携帯ではShift-JISしか表示されないということを・・・今知り、パニックになっています。 というのは、MySQLがEUCで動作している為、いくらPHPをShift-JISで保存しても、DBから引いてきた情報は文字化けしてしまうのです・・・。 では、MySQLの文字コードを変更すれば?ということになるのですが、サーバーの環境上、それを変更することが出来ません。 どうすればいいのでしょうか・・・。 エンコードコマンドも調べたのですが、うまくいかず。 出来れば、SQLで取ってきた行を一括でエンコード出来る方法があれば助かりますが、その他の方法でも結構です。 とにかく、今の環境で携帯サイトを文字化けなく表示する方法をご教授下さい。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 「shift_jis」と「EUC-JP」

    「shift_jis」と 「EUC-JP」 で書かれている「別べつ」のページ間で、 タグや構文を、コビーして使ってもいいんでしょうか? ---------------------------------------------------- ホームページビルター8で、それぞれ、タグや構文を見ると、 文字化けもなく見えるので、普通にコピーして使ってもいいでしょうか?

    • ベストアンサー
    • HTML
  • HTMLがSHIFT-JISにならない

    いつもお世話になります<(_ _)> 携帯電話用サイトを作っているのですが、HTMLファイルの最初に <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> と設定しても、PCでアクセスした時にUTF-8で表示され文字化けされてしまいます。 HTML自体の文字コードはSHIFT-JISで保存されております。 手元に携帯電話がないので、まだ携帯表示は確認していませんが、スマートフォン(Android)で見ても文字化けしています。 なぜcharsetでSHIFT_JISを指定し、ファイルもSHIFT_JISで保存しているのにも関わらず、UTF-8になってしまうのでしょうか・・・? 同じような現象をご存じのかた、是非ともお力添え下さい。 宜しくお願い致します<(_ _)>

    • ベストアンサー
    • HTML
  • 文字コードEUC→SHIFT-JISにすると動作しません

    http://cgikon.com/search/detail.php3?menu=1&cgi_id=412 上記の簡単なスクリプトを使いたいと思っています。 文字コードがEUCとなっており、そのままの状態で設置すれば動作します。 EUCではなく、SHIFT-JISにして動作させたいのですが、中に書かれている「EUC - JP」を「SHIFT - JIS」に書き換えて、またファイルの文字コードも「SHIFT-JIS」として保存しました。 またCSVデータも「SHIFT-JIS」に変換して保存。 変換したファイルをアップしてみましたが、表示される表の数値の箇所が真っ白になってしまいます。 一番上の行と一番左の列は表示されます。 足し算される数値の部分だけが表示されません。 どのようにすれば、EUCからシフトJISに変換して、動作させる事ができるのでしょうか。 アドバイスをお願い致します。

    • ベストアンサー
    • Perl
  • EUC-JPとShift_JISのどちらがいい?

    ホームページ制作の時に指定する文字コードについて Shift_JISとEUC-JPのどちらがいいのでしょう? 今までは私自身Shift_JISを使っていましたが、会社的にEUC-JPに統一しようという動きになってきていて、デメリットがあればやめようかなとも思っています。 メリットとデメリットがあれば教えてください。 また、各データベースを使ったりもします。

    • ベストアンサー
    • CSS
  • Shift_JISをeuc-jpに変換

    エクセルのデータをテキストに保存し直したデータがあります。 中身はタブ区切りの日本語の単語が数千レコード。 この時、このテキストファイルの文字コードは当然「シフトJIS」ですが、これをperlで受け取ってフォームから文字検索を行いテーブルに検索結果を表示させるプログラムを作りました。 シフトJISなので案の定、文字化けを起こしました。 なのでデータを一度「euc-jp」に変換すると「表」や「ー」などは文字化けを起こすことなく表示するようになりました。 ところが、「(1)、(2)、(3)・・・」の丸数字だけが何故か文字化けしたままで直りません。 なんとかなりませんでしょうか? #データの読み込み open F_DATA, '<', "$cgiparam" or die;  my @lines = <F_DATA>; close F_DATA; #文字コードの変換 foreach (@lines){  Encode::from_to($_,"Shift_JIS", "euc-jp"); } よろしくお願いします。

    • ベストアンサー
    • Perl
  • Shift_jisで表記され、文字化けしてしまうんです。

    VineLinuxに以下のものをインストールしました。 apache_1.3.34(bison-2.1、flex-2.5.4) php-4.4.1 mysql apacheを起動させ、phpの起動を確認(phpinfoで確認)したあと、 とりあえずhtdocsでテストしようと思って、 テスト的にhtmlを作ってブラウザでアクセスしたら、 以下のような現象が発生しました。 ・jisでエンコードすると、日本語表示される。 ・Shift_jis、EUCでエンコードすると文字化け。 ・html上のmetaタグで、charset=Shift_JIS入れてもだめ。 ちょっと行き詰ってます。 何か気になる部分があれば教えてください。 また、解決する上で必要な情報があったらゼヒご指摘ください。 よろしくお願いします。

  • Smartyについて

    Smartyについて Smartyをインストールしました。 OS:ubuntu インストール先:/usr/local/lib/Smarty-2.6.26 php.ini[include_path]の設定:/usr/local/lib/Smarty-2.6.26/libs/を追加 /var/www/以下にtestフォルダ作成 /var/www/test/index.html | /test/index.php chmod 644 | /tempalates chmod 775 templates | / index.tpl chmod 644 /templates_c chmod 775 templates_c /configs chmod 775 configs /cache chmod 775 cache index.phpの内容 <?php require_once(”Smarty.class.php"); $o_smarty=new Smarty(); $o_smarty->template_dir="./templates/"; $o_smarty->compile_dir="./template_c/"; $o_smarty->assign("name","world"); $o_smarty->display("hello.tpl"); ?> index.tplの内容 <html> <head> <title>Hello,world</title> </head> <body> Hello,{$name}! </body> </html> http://web.domain/test/index.php を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。