プロが教える店舗&オフィスのセキュリティ対策術

以下のように作成して、実際に表示すると文字化けします。
CGIは素人です・・。宜しくお願いします。

# -----ここから出力 -----
print "Content-type:text/html\n\n";

print << "END_OF_HTML";

<HTML>
<HEAD>
<TITLE>DOUBLE STEAL DESIGN MARKET</TITLE>
</HEAD>

<BODY background="bg2.gif">
<CENTER>
<B><FONT size="4">
<FONT color="red">
<BR>
ありがとうございました。
<P>
至急お送りいたします。</FONT>
<P>
<FONT color="blue">☆</FONT>
</B>
</CENTER>
</BODY>
</HTML>

END_OF_HTML


実際に表示される文字は・・・


^0!#(B
;j5^Aw?STDOUT_TOP!#(B

!y(B


です。お願いします・・・。

A 回答 (6件)

>スクリプトのコード体系とcharsetの指定がずれていませんか?


>
>上記の意味がわからなくて・・・。どうしたら良いのですか??

この件ですが、angelyがおつくりになったPerlスクリプトの

>ありがとうございました。
>至急お送りいたします。

の文字は、EUC,シフトJIS,JIS漢字のいずれで作成されてますか?この文字のコードとcharsetで指定したコードの種類が違えば、化けますよ。

FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。
    • good
    • 0
この回答へのお礼

arataさん、素敵です。まさに、『FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。』でした。感動です。何度も答えてくれてありがとうございます。以前質問出したときは、見捨てられたので、今回もいつ見捨てられるんじゃないかと心配でした。
インターネットって簡単に手を引こうと思えば引けるのに・・・。今度は上記のものを自分用のスクリプトに書き換える作業です。また何かあったら質問にのせるので、お願いしますね。
ではでは、本当にありがとうございました。

お礼日時:2001/08/21 23:15

> &jcode'convert(*form,'sjis');


の記述が、気になりますね。
 formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか?

 もしそうなら、こんな風に書き換えてみて下さい。

  if ($ENV{'REQUEST_METHOD'} =~ /POST/i) {
    read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
  } else {
    $buffer = $ENV{'QUERY_STRING'};
  }

  @pairs = split(/&/,$buffer);
  foreach (@pairs) {
    my ($key,$val) = split(/=/,$_);
    $val =~ tr/+/ /;
    $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    &jcode::convert(\$val, 'sjis');
    $FORM{$key} = $val;
  }

# 「Perl 5」を想定しています。

この回答への補足

お返事ありがとうございます。
教えていただいた通り、スクリプトを変更したんですが
こんどは表示ができなくなってしましました。

formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか?

上記の内容の意味がわからなくて・・・。
マニュアル本についてきたCD-ROMをコピーして使っているので
自分ではとくに何もしていないんです・・・。

補足日時:2001/08/20 21:12
    • good
    • 0

もしかして、間違っていたら「ごめんなさい」なので


すが、

&jcode'convert(*form,'sjis');

って、入力側(ウェブブラウザ→サーバー)のコード
をシフトJISに変換している部分ですよね?

これは、出力(サーバー→ウェブブラウザ)するデータ
の文字コードとは関係ないと思うのですが、スクリプト
のコード体系とcharsetの指定がずれていませんか?

この回答への補足

見捨てないでくれてありがとうです。
マニュアル本を読んだら、&jcode'convert(*form,'sjis');
は入力側の文字変換のことだと書いてありました。
じゃあ、文字化けには関係ないですよね?

スクリプトのコード体系とcharsetの指定がずれていませんか?

上記の意味がわからなくて・・・。どうしたら良いのですか??

補足日時:2001/08/20 21:05
    • good
    • 0

print "Content-Type: text/html;charset=Shift_JIS\n\n";



上記以外に、メタタグをつけると直るかもしれません。

print << "END_OF_HTML";

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
<HTML>

この回答への補足

何度もありがとうございます。
メタタグをつけてみたのですが、状況は変わらすです・・・。
送信ボタンを押してからの画面が文字化けするんですけど、
その前の画面のオーダーフォームは文字化けしないんですよぉ。
これはなぜなんでしょう?
# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');
というスクリプトに関係あるのでしょうか??

補足日時:2001/08/19 20:46
    • good
    • 0

まず、charsetのところですが、-ではなくて、


charset=だったと思うのですが。

それから、Perlかシェルのスクリプトだと思います
が、スクリプトの文字コードとContent=で指定する
文字コードは一致させてください。
スクリプトがシフトJISならShift_JISですし、EUC
ならeuc-jpとしてください。

では

この回答への補足

ありがとうございます。

スクリプトの文字コードは
# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');
です。なので、Content・・・では
Shift_JIS にしました。
それでも文字化けが生じます。

なぜでしょう??
おわかりになりましたら、教えてください。

補足日時:2001/08/18 23:25
    • good
    • 0

文字コードは何をお使いでしょう?わかんない?(^^;


わかんないなら、その化けた CGI を表示させた状態で、エンコードを変えてみましょう。
InternetExplorer なら、上メニューの[表示]-[エンコード]。
ShiftJIS/EUC/JIS が、日本語のコードです。どれに当てはまるか試してみる。

まぁ、普通の Win9x とか Mac とかなら Shift-JIS 使ってる気がするので、
print "Content-type:text/html\n\n";
の行を
print "Content-type:text/html;charset-Shift_JIS\n\n";
ってしてあげると幸せかも知れません。

この回答への補足

早速ありがとうございます。
エンコード調べてみました。
シフト JIS というものになっていたので、
スクリプトを教えていただいたように(print "Content-type:text/html;charset-Shift_JIS\n\n"; )
直してみたのですが、結果は同じでした。

どうしたらよいのでしょうか??

補足日時:2001/08/18 15:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!