海外のレンタルサーバーに配置したCGIが文字化けします。これを直したいのです。



表示されるHTMLには、
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
と指定しており、

.htaccessには、
AddDefaultCharset shift-jis
AddType "text/html ; charset=shift_jis" .html

と指定してあります。
.htaccessはドキュメントルートに配置しています。

環境
apache 1.3
perl 5.6
起動時のファイル名は、index.cgiです。

IEからエンコードでShift-JISを選択すれば
正しく表示されます。

ほかに何が必要でしょうか。



ちなみに、HTMLの背景色を青で指定しているのに、
ピンクで表示されるのはなぜでしょう。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2007/03/19 13:22:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Bookmarker No.6

回答回数191ベストアンサー獲得回数34

ポイント18pt

HTTPヘッダーのcharsetが

Content-Type: text/html; charset=windows-1251

になってますね。

でも、

Server: nginx/0.5.7

ってなってますよ。

ちょっと調べた限りではnginxってApache互換じゃなさそうですが…。

id:pinkymonk

サーバー自体はFreeBSDなのですが、

リバースプロキシがnginxかもしれないです。

関係があるのかどうかわからないのですが。。。

こういう場合の対処方法ってないのでしょうか。

2007/03/16 22:04:04

その他の回答5件)

id:ootatmt No.1

回答回数1307ベストアンサー獲得回数65

ポイント19pt

ヘッダーの出力の際に文字コードを指定してやればいいと思います。

print "Content-type: text/html; charset=SHIFT_JIS\n\n";


> ちなみに、HTMLの背景色を青で指定しているのに、

> ピンクで表示されるのはなぜでしょう。

これは単純に指定が間違っているのでは?

コードをコピペしてもらえればわかるかもしれません。

id:pinkymonk

回答ありがとうございます。

>ヘッダーの出力の際に文字コードを

>指定してやればいいと思います。

>print "Content-type: text/html; charset=SHIFT_JIS\n\n";

すみません。記述がもれてました。

これもやってます。

>これは単純に指定が間違っているのでは?

>コードをコピペしてもらえればわかるかもしれません。

コードを見直したところ僕のミスでした(^^;

2007/03/16 11:47:59
id:gikonekos No.2

回答回数54ベストアンサー獲得回数0

ポイント19pt

>|html|

<<

Σ:)<おまじない的にこれを頭につけてますね。ま、参考程度に

id:pinkymonk

ありがとうございます。

2007/03/16 15:23:36
id:Bookmarker No.3

回答回数191ベストアンサー獲得回数34

ポイント18pt

AddDefaultCharset shift-jis

こんな感じで、ヘッダーかmetaタグで"shift_jis"を"shift-jis"と書き間違えているのでは?

id:pinkymonk

ありがとうございます。

これも直しましたが状況かわらずです。

レンタルサーバーがロシアにあるので、表示されるのはかならずWindows-1251のコードに変換されてしまいます。

2007/03/16 15:23:25
id:ransamu No.4

回答回数138ベストアンサー獲得回数7

ポイント18pt

htmlの記述の問題での自分の過去の失敗例として,ヘッダーで

エンコードを指定するmetaタグの前にtitleタグをおいてしまった、

というのがあり、同じように文字のエンコード動作がうまくいかなかったことがあります。


ブラウザがmetaタグのエンコード指定を読み込む前に、titleタグの日本語文字列で自動判定してしまい、これが誤っていたということの結果でした。

id:Bookmarker No.5

回答回数191ベストアンサー獲得回数34

ポイント18pt

表示されるのはかならずWindows-1251のコードに変換されてしまいます。

何が変換されるのですか?

HTTPヘッダ?CGIの出力内容?


AddDefaultCharsetディレクティブは、

Apache Core Features

HTTPヘッダにコンテントタイプパラメータを持たないレスポンスに追加される文字セットの名前を指定

するものなので、HTTPヘッダで

Content-Type: text/html; charset=Shift_JIS

と指定すれば、こちらが有効になるはずですが。


状況がよくわからないので簡単なテストCGI(ソースとそれをサーバーに置いたもの)を公開してみてはいかがでしょうか?

id:pinkymonk

CGIではなく、HTMLでも文字化けするのでHTMLを公開させていただきます。

http://www.lovefunk.net/index.html

このHTMLの文字コードはShiftJISで記述してます。

また、.htaccessは以下のように記述してます。

AddDefaultCharset Shift_JIS

AddType "text/html ; charset=shift_jis" .html .htm .cgi

AddCharset Shift_JIS .html .cgi

2007/03/16 18:54:56
id:Bookmarker No.6

回答回数191ベストアンサー獲得回数34ここでベストアンサー

ポイント18pt

HTTPヘッダーのcharsetが

Content-Type: text/html; charset=windows-1251

になってますね。

でも、

Server: nginx/0.5.7

ってなってますよ。

ちょっと調べた限りではnginxってApache互換じゃなさそうですが…。

id:pinkymonk

サーバー自体はFreeBSDなのですが、

リバースプロキシがnginxかもしれないです。

関係があるのかどうかわからないのですが。。。

こういう場合の対処方法ってないのでしょうか。

2007/03/16 22:04:04
  • id:pinkymonk
    みなさまありがとうございました。

    解決はできてませんが、レンタルサーバー会社に問い合わせしてみます。
    ロシア語苦手ですけど。。。

  • id:norinmura
    もしかしたら、そのレンタルサーバーに表示される広告の文字コードが違うのかもしれませんね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません