• ベストアンサー

SmartyとSJIS

テンプレートファイルに特定の文字を書くとfatal error ~~tag というエラーがでます。 {literal}{/literal}で囲めば問題ないのですが、それ以外の方法はないでしょうか? 文字コードはSJISから変更することはできません。

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

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

  • ベストアンサー
  • maura
  • ベストアンサー率46% (48/104)
回答No.2

Smartyのプリフィルタとポストフィルタを使えばいちいち{literal}で囲わなくてもOK http://it-laboratory.seesaa.net/article/18312366.html http://www3.atwiki.jp/tmogmni/pages/3.html#id_fecea521 Shift_JISの文字化け対策しないと駄目だけどいいの? EUCが楽だよー Smartyのアウトプットフィルタを使う手もアル

livrekun
質問者

お礼

なるほど。 やっぱりphpで作られてるものだからSJISだと不具合がたくさんあるんですよね。。。 フィルタを使ってみます。 それとできるだけEUC-JP使ってもらえるよう努力します。

その他の回答 (1)

回答No.1

特定の文字とは、具体的にどういった文字でしょうか?

livrekun
質問者

補足

「閲覧」「本文」という文字でエラーが出ます。 他にもあるのですが、ちょっと今出てきません……

関連するQ&A

  • 【Redhat】SJISにおける文字化け

    OS:Redhat Linux ES 4.6 文字コードをSJISにしてファイルを表示しますと、特定の日本語文字(例えば、II)が 文字化けしてしまいます。 何が原因なのでしょうか。。。

  • sjisの文字化けとその対処方法について

    今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?

    • ベストアンサー
    • PHP
  • MySQL+PHPサイトでSJISからEUCに変換したい

    いつもお世話になっております。 現在PHP4.3.9+MySQL4.1.2でSJISコードで運営をしておりますが、サイトの文字コードをEUCに変更しようかと検討しております。それで、現在いろいろとEUCコードでMySQLから引っ張ってきたデータの表示及びMySQLへのデータ登録の実験をしております。 まずは、PHPファイルをEUCに変換し、php.ini内のSJISだった箇所を下記のようにEUC-JPに変換しました。 mbstring.internal_encoding = EUC-JP mbstring.http_output = EUC-JP そして、PHPファイル内でMySQLへ接続後文字コードを指定している箇所を $sql="SET NAMES ujis"; mysql_query($sql); と変更しました。 実際のPHPファイルとphp.iniに関する部分のみEUCコードに変更し、sjisで設定しているMySQLの設定ファイルとテーブル内は何も変更していない状態です。この状態でフォームに入力した内容をMySQLのテーブルに追加し、追加した情報をPHPで表示する実験をしましたが特に文字化け等の問題は無く動作しました。また既にMySQLに登録してあるデータをEUCの環境で表示させましたが、問題なく表示されました。 前置きが長くなりましたが、MySQLの設定を特に変更しなくても今回私が行なった方法でSJISからEUCへの変換をしてしまって問題は無いでしょうか?PHPのファイル数やMySQLのテーブル数が多いので、いきなり実験通りに動くか不安があるので、質問させていただきました。 PHPやMySQLの文字コードの初歩的なことが分かっていないもので、変な質問になってしまいましたが、アドバイスいただければ幸いです。

    • ベストアンサー
    • PHP
  • Smartyのエラーが2つずつ出ます

    PHP5+Smartyでサイトを作っています。 「$smarty->display("hoge.tpl");」としてテンプレートファイルを呼び出します。 そのテンプレートファイル「hoge.tpl」が存在しない時に、以下のエラー文が必ず2つ表示されます。 Warning: Smarty error: unable to read resource: "hoge.tpl" in /root/.../smarty/Smarty.class.php on line 1092 一度しか呼び出していないのにエラーが2つ表示されるので、コードの記述ミスかと考えたのですがわかりませんでした。 テンプレートファイルがある場合は、テンプレートが二度呼び出されることはありません。 エラー文にある1092行目からコードを追って見たのですがわかりませんでした。 どうすればエラー表示を1つにできるのでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • FTP SJIS 能など(2バイト目5C)文字 転送エラー

    FTP SJIS 能など(2バイト目5C)文字 転送エラー お世話なります。 FTP転送において、ファイル名に能、表など(2バイト目が5C)を含むファイルをFFFTP、ALFTP等で転送しようとすると、応答コード550の転送エラーとなります。 Shift-JISで能・表などの2バイト文字を扱う場合、2バイト目が5Cだと、5Cが「\」と認識され エスケープ文字になってしまう問題は有名のようですが、 どうすれば等不具合は解消できますでしょうか。 環境はRedhatでシステム文字コードは「/etc/sysconfig/i18n」を確認したところUTF-8です。 別のSoralis環境では文字コード「/etc/default/init」を確認したところで、 SJISですが、問題なく当該文字を転送できます。 ということはFTPサーバプロセスがSJIS文字を、認識するのにUTF-8に変換する過程で読み取れずにエラーということでしょうか? ご教示いただけたら幸いです。 よろしくお願いいたします。

  • SJIS文字コードについて

    文字コードSJISでHTMLを書いた時は、 海外のブラウザで見ることができますか? サーバ側の問題もありますか?

    • ベストアンサー
    • HTML
  • 2バイト文字をJEFからSJISに変換したい

    文字コード、JEFからSJISへ変換したいのですが、 2バイト文字をどのように置き換えればよいでしょうか? JEFコードは、'28'~'29'で括った範囲が漢字コード扱いになるということでなんとかできそうな気がしますが方法が思いつきません。 又、JEFコードからSJISへ変換してくるソフトウェア(UNIX版)などありますでしょうか?

  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • IIS5.1です。PHPをブラウザで開くと文字コードがSJISになる。

    IIS5.1です。PHPをブラウザで開くと文字コードがSJISになる。 WindowsXPのIISをWEBサーバとして利用しております。 http://localhost/test.phpを開いた際、必ず文字コードがSJISとなります。 そのページのメタタグには間違いなくキャラクタセットをEUCにする指定がされています。 そこでブラウザの機能で、エンコードをEUCに変更すると正常に表示されますが、 ページ移動するとまたSJISとなり、同じくエンコードを変更しなければなりません。 IISの設定かとは思うのですが、解決方法が見つかりません。 お教えいただけると助かります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl