
現在、携帯サイトの構築を行っています。
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
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
xeno-fieldさんの方法で成功しました、
まだ色々試してみますが問題なさそうです。
コードも載せて頂いてありがとうございます。
これで問題なくできそうです!
ありがとうございました。
No.1
- 回答日時:
こちらも携帯向けのページを見直し中です。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Java VScodeのターミナルの文字化けについて 1 2022/09/27 22:19
- その他(ビジネス・キャリア) JISの表記について 1 2023/07/06 14:35
- その他(IT・Webサービス) 電気ガスの手続きで文字を入力したいのですが、入力したい文字がアルファベットなんです。ですが、文字がJ 1 2023/05/14 18:00
- その他(プログラミング・Web制作) sedの動作 2 2022/10/10 13:38
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- iOS これは日本語入力の大発明ですか? 7 2022/12/21 07:17
- Word(ワード) ワードのコメント内の文字を、下付けにする方法 2 2023/08/09 11:30
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のURLに移動するには?
-
Smarty/pluginsファルダ内 fun...
-
検索結果の出力後、それをTXTに...
-
PHPで五角形、または多角形のグ...
-
画面にそのままを出力したい
-
php 画像表示(imgタグ)
-
セッション管理に関する質問
-
携帯サイト絵文字入りのPHPフォ...
-
PHPがうまく表示されない・・・?
-
CGIからPHPへの書き換え
-
pleiadesでステップごとの結果...
-
phpexcelにてsubmitボタンを押...
-
サニタイズについて
-
phpでテンプレートを使ったファ...
-
phpとdb
-
phpでmysqlから画像パスを出力する
-
<A HREF="bg.php" target="_bl...
-
nl2bの代用関数を何か知ってい...
-
このサイトの作成技術は何ですか?
-
設定した時間だけ実行されるプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPSpreadsheetによる書き出し...
-
CSV出力にHTMLが入ってしまう
-
TCPDFについて
-
webroot以外の画像の表示
-
PHPにおける時間計算、時間足し...
-
¥マークを出力したいがバック...
-
PHPで取得したHTML内のdiv要素...
-
リダイレクト元のURLの取得方法...
-
Whileループ時の改行?
-
ImageStringで日本語表示させたい
-
GDで画像表示
-
バイナリファイルをブラウザに...
-
json_encode日本語表示/PHP5.2.5
-
mPDFでのPDF出力がうまくいかな...
-
文字化け
-
PHPとTwitter Bootstrap
-
ヒアドキュメント 前にタブを...
-
warningを画面に表示させない設...
-
フィルタリングとバリデーショ...
-
【PHP】関数で処理が止まってる...
おすすめ情報