'TIP'에 해당되는 글 47건
- 2010.06.16 携帯ShiftJIS
「ケータイサイトにSmartyを使おうとしたがうまくいかない」という質問をよく受けることがあるので、注意点をまとめてみます。
問題となるのは、文字コードに「Shift_JIS」を使った場合です。
最近は対応端末が増えたため、UTF-8でページを作る場合も多いですが、過去の資産やら、互換性の問題やらでShift_JISを使うこともあります。
ところがSmartyではSJISは使えません。
なぜなら、Smartyの標準のデリミタである
「 { 」 (0×007b)、 「 } 」 (0×007d)
を、SJIS文字列が含んでしまっていることがあるからです。
(つまり必ずしもエラーにはならないことに注意が必要です)
エラーが起こった場合には次のようなメッセージが表示されます。
Fatal error: Smarty error: [in path/to/tpl.html line 10]: syntax error: unrecognized tag: ‹ (Smarty_Compiler.class.php, line 446) in /path/to/Smarty/Smarty.class.php on line 1095
これを回避するには、主に次の2つの方法があります。
1. デリミタを変更する
波カッコが悪さをしているので、それを変更してしまえば大丈夫です。
次のようにしてデリミタを変更することができます。
$smarty->left_delimiter = '{{';
$smarty->right_delimiter = '}}';
デリミタを変更した場合は、テンプレート内の他のSmartyタグも忘れずに変更しましょう。
修正前 : {$hoge} 修正後 : {{$hoge}}
他にも「<{$hoge}>」なんかを使う人もいます。この辺りは好みの問題です。
2.プリフィルタとポストフィルタを設定する
プリフィルタとポストフィルタを設定することで、Smartyでテンプレートが処理される際に、テンプレートがEUC-JPとして処理され、その後再びSJISとなって出力されます。
※この方法を使った場合には、ドコモのSJIS形式の絵文字が文字化けしてしまうので注意が必要です。
絵文字を使いたい場合はSJIS方式ではなく、&xxxxx;方式で書きましょう。
$smarty->register_prefilter("convert_encoding_to_eucjp");
$smarty->register_postfilter("convert_encoding_to_sjis");
//--------------------------------
// Smarty SJIS対応用関数1
//--------------------------------
function convert_encoding_to_eucjp($template_source) {
if (function_exists("mb_convert_encoding")) {
//文字コードを変換する
return mb_convert_encoding($template_source, "EUC-JP", "SJIS");
}
return $template_source;
}
//--------------------------------
// Smarty SJIS対応用関数2
//--------------------------------
function convert_encoding_to_sjis($template_source) {
if (function_exists("mb_convert_encoding")) {
//文字コードを変換する
return mb_convert_encoding($template_source, "SJIS", "EUC-JP");
}
return $template_source;
}
3. 検証
検証は文字コードの中に「{」や「}」を含んでいる文字を書いてやればOKです。
(例:「閲」「厭」「宮」「急」「鶏」「迎」など)
例えば「鶏を迎え討つ」などとSJISテンプレートに記載し、表示されれば大丈夫ということになります。
4. まとめ
- Smartyは、そのままではShift_JISは使えない
(ただし半端に動作することに注意) - SJISを使いたい場合は、デリミタを変えるか、プリフィルタ・ポストフィルタを使う
- 検証は「閲」「厭」「宮」「急」「鶏」「迎」などで
'TIP' 카테고리의 다른 글
戻るボタン禁止 (0) | 2010.09.14 |
---|---|
우클릭 잠금/해제 (0) | 2010.07.01 |
asp2php, php2asp (0) | 2010.06.14 |
Smarty설치시 문자깨짐을 막아 주는 법 (0) | 2010.06.10 |
日本P2P (0) | 2010.06.09 |