• 締切済み

SSIの日付の文字化けの対処方法はありますか?

お世話になります。 SSIで日付を次のようにHTMLのページに書いています。 <!--#config timefmt="%Y年%m月%d日(%a)" --><!--#echo var="DATE_LOCAL" --> すると、今までは、「2014年11月20日(Thu)」と出ていましたが、 ブロバイダが、サーバーを機種変更して新しくしたら文字化けして、「2014”N11ŒŽ20“úiThuj」と出てしまいます。 そこでブロバイダに問い合わせましたら、 「SSIはユーザー権限で動作しますのでシステム系のコマンドや 他のディレクトリにあるCGIなどは動作しません。 日付を表示したい場合はJavaなどを使用していただきますようお願いいたします。」 という返事が返ってきました。 返答の意味が分かりませんが、今まではよかったのに、どう考えたらいいのでしょうか? 今でも他のSSIは使えています。 よろしくお願い致します。

  • CGI
  • 回答数4
  • ありがとう数20

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.4

echo に encoding 属性を指定してみたらどうでしょうか。私の利用しているプロパイダでは、文字化けせずに表示することができます。(ちなみに、HTML の文字コードは euc-jp で、サーバは Apache/2.2.25 です。) <!--#config timefmt="%Y年%m月%d日(%a)" --><!--#echo encoding="none" var="DATE_LOCAL" -->

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

apache のデータ変換用コマンドの設定らしいのだが(詳しいことは知らないけど)、SSIのconfigフォーマットに含まれた多バイト文字を、1バイトごとに &#x25; というようなhtmlエンティティ形式に変換しちゃうような状況をみたことがある。数年前に消えたフリーサーバーがそうだった。これは出力されたhtmlソースをみると解ります。 プロバイダーの返事が、意味不明ということは、その設定変更は望めないので、SSI のフォーマットに多バイト文字を含めるのはあきらめましょう。年と月と日と個別にやればok <!--#config timefmt="%Y" --><!--#echo var="DATE_LOCAL" -->年 <!--#config timefmt="%m" --><!--#echo var="DATE_LOCAL" -->月 <!--#config timefmt="%d" --><!--#echo var="DATE_LOCAL" -->日 <!--#config timefmt="(%a)" --><!--#echo var="DATE_LOCAL" -->

kitaone
質問者

お礼

ありがとうございます。 真の解決ではないですが、書いていただいた内容で目的は達成できます。 私もいま現在そうしています。ありがとうございました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

<!--#config timefmt="%Y/%m/%d" -->

kitaone
質問者

お礼

たしかに <!--#config timefmt="%Y/%m/%d(%a)" --><!--#echo var="DATE_LOCAL" --> と記述すると、今の状態でも、「2014/11/20(Thu)」と文字化けせずに表示されます。 しかしながら、質問の通り、前はちゃんと年月日の表示が出来ておりました。 <!--#config timefmt="%Y年%m月%d日(%a)" --><!--#echo var="DATE_LOCAL" --> →「2014年11月20日(Thu)」   ↑このように文字化けしない方法はどうしたらよいのでしょうか?

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

そのHTMLの文字コードを確認してください。 また、単純に <!--#config timefmt="%Y/%m/%d" --> だとよいはずです。 なお、 「SSIはユーザー権限で動作しますのでシステム系のコマンドや 他のディレクトリにあるCGIなどは動作しません。 日付を表示したい場合はJavaなどを使用していただきますようお願いいたします。」 はとても、トンチンカンです。

kitaone
質問者

お礼

HTMLの文字コードは、シフトJISでメタタグの所にcharset=Shift_JIS"としています。 で、教えていただいたように、 <!--#config timefmt="%Y/%m/%d" --> だけだと、何も表示されません。 ブロバイダの回答は、JavaScriptで日付を表示するくらいならSSIのページの意味がないし、あとは何を言っているのか分かりません。 とりあえず、ありがとうございました。

関連するQ&A

  • SSI 文字化けしてしまう

    SSIで日付を表示するため、shtmlファイルに<!--#echo var="DATE_LOCAL" --> を入れたのですが、shtmlの文字コードをUTF-8にして保存すると文字化けしてしまいます。 SHIFT-JISで保存すれば正常に表示されるのですが、UTF-8で保存しても正しく表示できるようにするにはどうしたらよいのでしょうか?  ちなみにサーバーはApache 2.0.63です

  • SSIの使用について

    SSIの使用について SSIを使用してサイトを作成予定です。読込み側の拡張子はshtmlで読み込まれる側の拡張子はhtmlでどちらも静的なページです。 SEOについて質問なのですが昔は、ページの拡張子がhtmlじゃなければ効果が得られないなどとありましたが今はhtmlやphpでも特に関係なく「index.php?id=x」などの動的なパラ―メータが付属していなければ然程問題ない感じで捉えられていますよね? 調べた見たところshtmlではなくhtmlでもSSIの使用ができるようなのですが他のhtmlをSSIとして扱われる為にサーバーの負荷が高くなるとありました。 確かにその通りだと思うのですが実際どの程度の負荷が掛かるものでしょうか? 上記でパラメータがなければ問題ないと述べたばかりですが可能なものならばやはりhtmlでSSIを動作させるべきなのか悩んでおります。 うまい回避策などもありましたらアドバイスもいただけますと幸いです。

    • ベストアンサー
    • HTML
  • SSIでの更新日表示に条件をつける

    こんにちは。 SSIを利用し、トップページに他ページの更新日を表示させていますが、 <!--#config timefmt=”%y/%m/%d(%a)”--> <!--#flastmod file=”任意ページ”--> これに、「1週間以内」の場合だけ表示させるようにしたいのですが、 ご教示しただけないでしょうか?

  • サーバの日付を変更するとWebアプリケーションがエラーとなる

    Windows Server 2003を載せたサーバをWEBアプリケーションのテストサーバとして使用しています。 日付によって動作の変わるプログラムをテストするため、サーバの日付を変更した後でクライアントからアクセスしたところ、 「このページを表示する権限がありません。提供された資格情報には、このディレクトリまたはページを表示する権限がありません。」 「HTTP エラー 401.1 - 権限がありません : 資格情報が無効のため、アクセスが拒否されました。インターネット インフォメーション サービス (IIS) 」 というエラーとなってしまいました。 日付を元に戻し、IISを再起動したところ、また問題なくアクセスできるようになりました。 どうすれば日付を変更してWebアプリケーションを動作させられるのでしょうか。

  • HTMLソースの中にJavaScriptで記述の日付を入れたいのですが

    HTMLソースの中にJavaScriptで記述の日付を入れたいのですが 自分のWebサイトに複数のディレクトリ・サブディレクトリ・ファイルがありますが、 JavaScriptで以下のように文字を作ろうと思います。 私が利用しているレンタルサーバーではSSIが使えません。 記述したい内容は 例えば、更新日:2010年10月6日(水または水曜日)です。 ソース全体のどこにはめ込めばいいかは、なんとなくわかります。 サイトでJavaScript関係の記事を見たのですが、難しくて苦労しています。 <script>~</script>の~部分の記述方法がわかりません。 サルでもわかる簡単な記述の仕方をぜひ教えてください。

  • JS 日付表示

    JavaScript for文の日付表示について JavaScriptでfor文で日付表示したい場合、月末の最終日を取得するだけでは月の切り替えができないのでしょうか? 今日から一週間後までを表示するアプリを作りたいのですが1/31を過ぎると2/1にならず1/32と表示されてしまいます。 何か間違っている所ありますでしょうか? 以下ソースコード <script type="text/javascript"><!-- var now = new Date(); var y = now.getFullYear(); var m = now.getMonth() + 1; var d = now.getDate(); console.log(now); // Thu Jan 30 2014 00:00:00 GMT+0900 (東京 (標準時)) console.log(new Date(now.getFullYear(), now.getMonth() + 1, 0)); // Fri Jan 31 2014 00:00:00 GMT+0900 (東京 (標準時)) for(i=0;i<100;i++){ document.write(y + "/" + m + "/" + (d + i).toString() + "<br>"); } // --></script> <body> </body>

  • PHPで明日の日付と明日の曜日を取得したい

    <td align="center"><?php date_default_timezone_set('Asia/Tokyo'); $week2 = array( 'Mon'=>'月', 'Tue'=>'火', 'Wed'=>'水', 'Thu'=>'木', 'Fri'=>'金', 'Sat'=>'土', 'Sun'=>'日' ); $w = $week2[date('D')]; echo date("j日") . "($w)"; ?></td> 上記のコードで今日の日付と曜日が取得出来るのですが、明日の日付と明日の曜日を取得するのはどうすれば良いのでしょうか。

  • SSI される .inc ファイル内に PHP を記述したい…が…

    お世話になっております。 .html から、SSI で .inc ファイルを呼び出し、その inc ファイル 内に記述の PHP を実行したいと考えております。 例えば、test.html に   <!--#include virtual="../include/inc/meta.inc"--> のような記述があり、include.inc に   <?php echo "test"; ?> のように記述があった場合、php4 では test と表示されるのですが、 php5 では、   <?php echo "test"; ?> がそのまま出てきてしまいます。 php4 と php5 の httpd.conf の違いは   LoadModule php4_module C:/php446/sapi/php4apache2.dll   LoadModule php5_module c:/php525/php5apache2.dll の行のみです。(いずれかをコメントにし、4と5を切り替え) 以下、httpd.conf の SSI の動作に影響を及ぼすと思われる 行を抜粋します。(コメント行も含みます) 環境は WINDOWS&Apache2 です。 <Directory /> Options FollowSymLinks MultiViews Includes ExecCGI AllowOverride All </Directory> <Directory "C:/Program Files/Apache Group/Apache2/htdocs"> Options All AllowOverride None Order allow,deny Allow from all </Directory> AddType application/x-httpd-php .inc .html .php #AddHandler server-parsed .shtml .html #AddType text/html .shtml .html .inc AddOutputFilter INCLUDES .shtml .html .inc #<Files *.html> #ForceType text/html #SetOutputFilter INCLUDES #</Files> #<Files *.shtml> #ForceType text/html #SetOutputFilter INCLUDES #</Files> #<Files *.inc> #ForceType text/html #SetOutputFilter INCLUDES #</Files> 原因は php.ini ですかね? ご存知の方、ご教授下さい。

    • ベストアンサー
    • PHP
  • シェルスクリプト:入力した日付のチェック

    BourneShell勉強中の初心者のものです。 ユーザーが(yyyy-mm-dd)の形式で入力した日付に対して、日付が指定されたフォーマットにあいかつ範囲以内であることチェックして、次のステップに進みます。 1月から12月まで毎月31日まであるものとみなし、1000年から9999年までが範囲内です。 以下のようなスクリプトを書いたのですが、もう少し短くすっきりとできないでしょうか?何か他に方法があればご教授お願いします。 echo "日付を入力してください(yyyy-mm-dd):\c" read hiduke case $hiduke in [1-9][[0-9][0-9][0-9]-0[1-9]-0[1-9]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-0[1-9]) break ;; [1-9][[0-9][0-9][0-9]-0[1-9]-[1-2][0-9]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-[1-2][0-9]) break ;; [1-9][[0-9][0-9][0-9]-0[1-9]-3[01]) break ;; [1-9][[0-9][0-9][0-9]-1[0-2]-3[31]) break ;; "") echo "入力されていません" ;; *) echo "指定外です" ;; esac

  • 日付名のディレクトリを世代管理したい

    linuxのコマンドについて教えてください。 あるディレクトリ内で日付のディレクトリを3世代管理しています。 今まではrmで手動削除していたのですが、他のディレクトリでも同様の作業をしたいので、 スクリプトで行おうと考えています。 ただ、ディレクトリ内には様々な名称のフォルダ・ファイルがあり、 上手く日付のディレクトリを取ってこれません。 イメージとしては日付のディクトリだけを取ってきて、ソートし古いのを削除でいけると思うのですが… 詳細は以下です。 同一ディレクトリ内に以下のフォルダがある 20150101 20150103 20150105 20150107 hoge test sample.txt などなど この中で日付のディレクトリの4番目に古いディレクトリを削除したい。 (20150101のディレクトリだけ削除するイメージです) どのようにコマンドを打てばいいか教えていただけますでしょうか? よろしくお願い致します

専門家に質問してみよう