• 締切済み

smartyについて

よくあるパターンですがsmartyを継承した独自のクラスをつくっています。 携帯からのアクセスであればパケ代節約のために全角カタカナを半角にしているのですが フォームに入力された全角カタカナも半角になってしまいます。 下記のソースで実行しているので当たり前の結果なのですがPOSTされた値を除き変換するには どのような方法がありますか? class MySmarty extends Smarty { public function display($template) { // キャリアチェック if(携帯であれば) { // 変数に格納 $output = parent::fetch($template); // 全角カナを半角カナに変換 $output = mb_convert_kana($output, 'aksV', 'UTF-8'); // SJISに変換 $output = mb_convert_encoding($output, 'SJIS-win', 'UTF-8'); // 出力 echo $output; } else { // 出力(携帯以外) parent::display($template); } }

みんなの回答

  • qaqa013
  • ベストアンサー率27% (17/62)
回答No.1

まさかと思うけど携帯とPC向けと同じテンプレートを利用しているのか? プログラムの処理を見る限りそう見えるんだけど 携帯なら携帯向けにテンプレート作ってそれを半角で作っておけば良いだけだろ。

dcx147
質問者

お礼

テンプレートは携帯用に別にありますが確かに最初から半角で作ればクリアできますね~ 例えばDBの値を表示する場合など表示箇所に半角変換する必要があるので一括で楽に 行いたいと思っておりこのようにしてました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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
  • 置換の順番について

    置換する目的は 半角カナを全角カナにする事なのですが、そこで問題が生まれました。 sjisに変換した後に、置換をすると文字化けになり、反対にする事によって正常に置換する様になっています。良くそこの仕組みが分からないのですがどうか教えて頂けないでしょうか?宜しくお願いします。 ###参照プログラム### ★#半角文字を全角文字に置換するケース &jcode::h2z_sjis(\$value); &jcode::convert(*value, 'sjis'); ★#文字化けを起こすケース &jcode::convert(\$value, 'sjis'); &jcode::convert(\$str, 'euc'); print "str : $str<br>\n";

  • 英気表現:英字でエラーにしたいのにカナ文字もひっかかります。

    こんにちは。 いつもお世話になっております。 簡単な正規表現で行き詰っており、検索したり参考書を読んだりしたのですが 解決できず、途方に暮れております。 どうか、ご指導よろしくお願い申し上げます。 英字が含まれていたらエラーを返したいだけなのですが 全角カナ文字の場合でも、エラーになってしまいます。 /* 「仮名」を全て「全角カタカナ」に変換 */ $namekana = mb_convert_kana($namekana, "KVC"); /* 「半角カタカナ」を「全角カタカナ」に変換し、「全角」英数字を「半角」*/ $namekana = mb_convert_kana($namekana, "KVa"); if( preg_match("/[a-zA-Z]/", $namekana ) ) { print "<font color=\"red\">カナに英字が混じっています。カナは全角カナで入力して下さい".$namekana."</font><br>"; } どこがおかしいのか、判らないのです。 どうかご指導よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • SJISで取得した半角カナをUTF-8に変換する方法

    現在、画面がSJISで作成されており、スクリプトはUTF-8で作成されています。 画面から来るデータを全て自動的にUTF-8に変換し、スクリプト上で処理し、 最後に自動的にSJISに変換し直して画面へ出力しています。 しかし、半角カナだけの文字列が画面から渡ってきた場合、 文字エンコーディングした瞬間、化けます。 全角文字を含んでいれば問題ないのですが・・・。 化けてしまう為、スクリプト内で既に支障を来たしてしまいます。 これをどうにか解消させる方法はありませんでしょうか? 以下、決定事項の為、変更する事は出来ません。  ・画面はSJISで出力、テンプレートファイルもSJISで記述  ・スクリプトはUTF-8で記述  ・根本的なエンコーディング処理   (受け取った値に対して、以下の処理を走らす。   mb_language("japanese");   mb_convert_encoding("UTF-8", "auto");   画面へ出力する際に、以下の処理を走らす。   mb_language("japanese");   mb_convert_encoding("SJIS", "auto");としている)  ・画面から受け取る文字列は何でも受け取る どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • phpでの文字エンコード

    携帯用のHPを作っているのですが、データベース文字コードがEUC-JPの為、一部の携帯では正常に表示されないでいます。 それで文字コードをShift_JISに変換してから出力したいのですが、 同時にmb_convert_kanaを使って全角カナを半角にしたいとも考えています。 個別に変換するなら、 $str = mb_convert_kana($row["~"],"k"); print mb_convert_encoding($str,"SJIS","EUC-JP"); で良いかと思うのですが、 ページ全体の出力文字を一気に変換する方法がわからないでいます。 そのような方法はあるのでしょうか? どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • Perl UTF8 での全角カタカナチェック

    ■環境 Linux, Perl 5.8 です。 画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。 HTMLもPerlも文字コードはUTF-8です。 ■質問 フォームからうけとった文字列で全角カタカナと特定の全角記号以外はエラーとする 入力チェック処理(正規表現)がうまくチェックを行ってくれません。 SJISだと以下のような書き方があるそうなのですが、UTF8での書き方がわかりません。 ・SJIS if($data !~ /^(?:\x83[\x40-\x96])+$/){ $mes="全角カナ以外の文字が指定されています"; } UTF8での書き方を教えて頂きたいです。 なお、許容する全角カタカナと特定の全角記号は以下のとおりです。 ========================================================== アイウエオカキクケコサシスセソタチツテトナニヌネノ ハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン ァィゥェォッャュョヵヶヴガギグゲゴザジズゼゾダヂヅデド バビブベボパピプペポーヽヾ ========================================================== ご教授お願い致します。

  • UTF-16の半角か全角の見分け方

    こんにちは、makotoと申します。現在CでUTF-16のファイルからSJISに変換してファイルに落とすという 処理を作っているのですが、UTF-16の半角と全角を見分ける方法はあるのでしょうか?

  • 半角カナ文字と特殊文字の変換

    半角カナ文字と「丸で囲まれた1」や「はしご高」等の特殊文字を SJISからJISへ、JISからSJISへ変換する方法を調べています。 半角カナはJISにないという記述も見たのですが、 サクラエディタで双方へ変換できるのと、 Outlookへ半角カナで送信したところ文字化けせず(全角になっていましたが) 受信できたこと、「はしご高」は受送信で文字変換されているようなので、 何か方法があるのではないかと調べています。 方法や参考資料を教えていただければと思います。 よろしくお願いいたします。

  • コード変換ライブラリについて

    この度、Windowsの開発で、コード変換を行うことになりました。 変換内容は、 1.半角カナを全角カナに変換 2.半角英数字を全角英数字に変換 3.全角カナ(カタカナ)を全角ひらがなに変換 の3パターンです。 漢字コードはシフトJISのみです。 上記変換を行うためのライブラリを探しております。 ご存じのかたおりましたら、教えていただけませんでしょうか。開発環境はVC++.NETですが、UNIX等で動作しているものでもかまいません。

  • Perl UTF8 での氏名チェック

    ■環境 Linux, Perl 5.8 です。 画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。 HTMLもPerlも文字コードはUTF-8です。 ■質問 フォームからうけとった文字列で以下の文字以外をエラーとする入力チェック処理(正規表現)をUTF8用に作りたいです。 ・漢字 ・ひらがな ・全角記号(ー-のみ) ・全角スペース ・全角カタカナ(http://okwave.jp/qa4997637.html) 直前の全角カタカナチェック(http://okwave.jp/qa4997637.html)と類似しているのですが、別に質問させていただきました。 色々探してみたのですが、UTF8でそのようなチェックモジュールが見つからず、 正規表現で書くしかないのかと思い、正規表現でも書いてみましたがうまくいきませんでした。 チェックモジュールが存在するのであれば教えて頂きたいです。 または、以下のようなシンプルな書き方(以下はUTF8ではなくSJISの全角カタカナチェックですが)があればご教授頂きたいです。 また、文字コードの対応(例えば\x40が何の文字にあたるか)がUTF8で分かれば応用がきくのですが、 それも見つからなかったので、対応表、調べ方をご存知の方がいらっしゃったらご教授頂きたいです。 ・SJISの全角カタカナチェック if($data !~ /^(?:\x83[\x40-\x96])+$/){ $mes="全角カナ以外がありますよ"; } よろしくお願い致します。