-PR-
解決
済み

文字化けとパスワード変更

  • 暇なときにでも
  • 質問No.56787
  • 閲覧数162
  • ありがとう数3
  • 気になる数0
  • 回答数7
  • コメント数0

お礼率 34% (19/55)

perlでCGIを作っています。入力フォームで文字を入力すると、text.dataでは文字化けしています。CGI上の文字は大丈夫なのですが・・。どのように対処すればいいでしょうか?
あと、if構文を試していたら、正解を書いても、パスワードを変えても対応せずに間違いだという画面しか出ません。必要があればプログラムも載せます。考えれることを教えてください。
通報する
  • 回答数7
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.7
レベル12

ベストアンサー率 57% (232/402)

秀丸の自動判別について補足です。

秀丸に限らず、基本的にエディタの「自動判別」はファイルの先頭部のデータの漢字コードを見て判別を行っているので、ファイルの先頭部にShiftJISのデータが入っていて、その後にEUCのデータが続くようなケースでは、エディタは漢字コードをShiftJISとして判断してしまうので、EUCの部分は文字化けして表示されます。

一度data.textのファイルを抹消してみて、ファイルサイズ0の状態でCGIを実行させるとどうなりますか?
お礼コメント
koujin

お礼率 34% (19/55)

ありがとうございました。一度data.textのファイルを抹消したところ、無事文字化けせずにできました。また、if構文はif2に名前を変更して、もう一度EUCで保存しなおしたところ、きちんと作動しました。
何度も教えてもらい本当にお世話になりました。ありがとうございました。またよろしくお願いします(笑)
投稿日時 - 2001-03-31 16:53:12
-PR-
-PR-

その他の回答 (全6件)

  • 回答No.2
レベル9

ベストアンサー率 35% (27/77)

あー、質問がよくわからないのですが、 「text.dataでは文字化けします。CGI上の文字は大丈夫なのですが」 というのは、 「ブラウザに表示されたフォームに文字を入力している時点では  化けていないのに、フォームデコードしたものになにがしかの処理を  加えると化けてしまう」 という意味でしょうか? cockyさんが書いているように、入力画面、 スクリプト内で文字コードを統一しないといけま ...続きを読む
あー、質問がよくわからないのですが、
「text.dataでは文字化けします。CGI上の文字は大丈夫なのですが」
というのは、
「ブラウザに表示されたフォームに文字を入力している時点では
 化けていないのに、フォームデコードしたものになにがしかの処理を
 加えると化けてしまう」
という意味でしょうか? cockyさんが書いているように、入力画面、
スクリプト内で文字コードを統一しないといけません。

また、shift-jisで書かれたスクリプトの中で「横浜」とか書くと
化けます。一番簡単なのはすべてEUCで統一することですかね。

ifに関しては、これだけの情報ではサッパリです。^^;
補足コメント
koujin

お礼率 34% (19/55)

ありがとうございました。下記に補足します。
このように書いたのですが、かなが文字化けしており、
英数は文字化けしません。一応、文字コードは指定してあるはずですが、これではいけませんか?

require 'cgi-lib.pl';
&ReadParse(*answer);
$data="$answer{'text1'},$answer{'select'},$answer{'text2'}";

require 'jcode.pl';
&jcode'convert(*data,'euc');$jikan = localtime(time());


open (ANSWER, ">>data.text");
print ANSWER "$jikan,$data\n";
close (ANSWER);

また、if構文ですが、長くなりますが、やはり全部載せます(^^;。すみませんが、また教えてください。

#!/usr/local/bin/perl

require 'cgi-lib.pl';
&ReadParse(*answer);
$data = $answer{'text1'};

require 'jcode.pl';
&jcode'convert(*data,'euc');

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


if ($data eq "ゆず") {

print <<EOF;

<html>
<head><title>当たり!</title></head>

<body>

<font size="4">
正解です。
</font>
<a href="index.html">ここ</a>をクリックしてください。
</font>
<br><br>

EOF

} else {

print <<EOF;

<html>
<head><title>はずれ!</title></head>

<body>

<font size="4">
はずれです。
<a href="JavaScript:history.back()">もう一度入力してください。</a>
</font>
<br><br>

EOF


}
print <<EOF;

</body>
</html>

EOF

exit;
投稿日時 - 2001-03-28 20:20:08


  • 回答No.1
レベル12

ベストアンサー率 57% (232/402)

漢字コードの変換はきちんと行っていますか? CGIで入力されるデータの漢字コードは一定ではありませんから、CGIの最初のところでjcode.pl等を使って漢字コードをきちんと変換してやらないと、そりゃ文字化けして当たり前です。 ...続きを読む
漢字コードの変換はきちんと行っていますか?
CGIで入力されるデータの漢字コードは一定ではありませんから、CGIの最初のところでjcode.pl等を使って漢字コードをきちんと変換してやらないと、そりゃ文字化けして当たり前です。
補足コメント
koujin

お礼率 34% (19/55)

ありがとうございます。一応、jcode.plを使ってはいるのですが・・。danyさんの補足に詳しく書きましたのでよろしければ、教えてください。ちなみにjcode.plは自分で書いていないので(あるのを拝借した)こっちに問題がある場合は特に詳しく教えてください。分かりにくい質問ですみません(^^;
投稿日時 - 2001-03-28 20:34:04
  • 回答No.3
レベル12

ベストアンサー率 57% (232/402)

スクリプト自体の漢字コードは何で書かれてますか? あと、出力結果のファイルの内容は何で確認しましたか? スクリプトがShiftJISで書かれているのに漢字コードをEUCに変換したら、同じ文字でもコード体系が異なるためにif文でデータが一致しないのは当然だと思います。 またEUCで出力されたファイルをダウンロードしてメモ帳などで開いても、Windowsのメモ帳はShiftJISコードのテキストでな ...続きを読む
スクリプト自体の漢字コードは何で書かれてますか?
あと、出力結果のファイルの内容は何で確認しましたか?

スクリプトがShiftJISで書かれているのに漢字コードをEUCに変換したら、同じ文字でもコード体系が異なるためにif文でデータが一致しないのは当然だと思います。
またEUCで出力されたファイルをダウンロードしてメモ帳などで開いても、Windowsのメモ帳はShiftJISコードのテキストでないと文字化けしますから、それは文字化けするように見えてしまいますよね。

大事なのはdanyさんも書かれているように「文字コードを一つに統一する」ことなので、その点に注意してやり直してみて下さい。
プログラムそのものは文法的におかしいところはなさそうなので。
補足コメント
koujin

お礼率 34% (19/55)

迅速なお返事ありがとうございます。

すごく恥ずかしいのですが、漢字コードを何で書いてあるかという質問について、よくわからないのですが、とりあえず、秀丸で書いてて、文字コードを自動判別するようにしてあり、そのままプログラムを書いています。のでEUCになっているものだと思っているのですが・・?

また、出力結果のファイルの内容はやはり、秀丸で開いています。
投稿日時 - 2001-03-30 00:26:39
  • 回答No.4
レベル9

ベストアンサー率 35% (27/77)

cockyさんと同様、スクリプトがsjisで書かれているような気がします。 エディタは何を使ってますか? eucの「ゆず」とsjisの「ゆず」はコードが違うからif は真に なりません。 ...続きを読む
cockyさんと同様、スクリプトがsjisで書かれているような気がします。
エディタは何を使ってますか?
eucの「ゆず」とsjisの「ゆず」はコードが違うからif は真に
なりません。
補足コメント
koujin

お礼率 34% (19/55)

お返事ありがとうございます。
エディタは秀丸を使っています。
cockyさんの補足にも書いたのですが、秀丸で自動判別にしてあるので、EUCで書かれているのだと思っていたのですが・・?

初心者すぎる質問で恥ずかしいのですが、スクリプトを確認するにはどうすればいいですか?

やっと、お二人の言いたいことが分かり始めたました(^^;たびたびすみませんがよろしくお願いします。
投稿日時 - 2001-03-30 00:35:00
  • 回答No.5
レベル9

ベストアンサー率 35% (27/77)

Windows上で扱う基本的な文字コードはshift-jis(sjis)です。 だから新規でテキストを作った場合などは何もしなければ sjisで保存されます。 セーブする時文字コードの指定とかできるんじゃないですか? 「自動判別」というのは読み込むファイルの文字コードを判別 する機能です。秀丸は使っていないので詳しいことは不明ですが、 offの状態でeucやjisのファイルを読ませると ...続きを読む
Windows上で扱う基本的な文字コードはshift-jis(sjis)です。
だから新規でテキストを作った場合などは何もしなければ
sjisで保存されます。

セーブする時文字コードの指定とかできるんじゃないですか?

「自動判別」というのは読み込むファイルの文字コードを判別
する機能です。秀丸は使っていないので詳しいことは不明ですが、
offの状態でeucやjisのファイルを読ませると化けたりするのでは。

私が使っているWZ Editorでは[ファイル]-[文書の情報]で文字
コードを確認することができます。秀丸にも似たような機能が
あるのではないかと。

IEにテキストを読ませて、[表示]-[エンコード]で調べてみるのも
いいかも。違うコードなら化けます。
お礼コメント
koujin

お礼率 34% (19/55)

本当に何度もありがとうございました。
一度、cockyさんに言われたとおり、textファイルを抹消したところ、無事文字化けせずにみれました。
やはり、sjisで書かれていたようでした。if構文のほうはif2に名前を変えてEUCで保存しなおしたところうまく作動しました。まだまだわからないことが多いですが、今回は本当に何度も教えてもらい感謝しています。ありがとうございました。またよろしくお願いします(笑)
投稿日時 - 2001-03-31 16:59:40
  • 回答No.6
レベル12

ベストアンサー率 57% (232/402)

スクリプトのencodingについてはdanyさんの書かれている通りです。 秀丸は使ってないので(私はDana派)詳細はわかりませんが、秀丸に限らず一般的なWindowsのエディタであれば標準の漢字コードはShiftJISになるので、EUCで処理したければnkfなどの漢字コード変換ツールを使う必要があります。 あるいは秀丸に漢字コードの変換機能があればそれを使うのも手でしょう。 ところで、出力さ ...続きを読む
スクリプトのencodingについてはdanyさんの書かれている通りです。
秀丸は使ってないので(私はDana派)詳細はわかりませんが、秀丸に限らず一般的なWindowsのエディタであれば標準の漢字コードはShiftJISになるので、EUCで処理したければnkfなどの漢字コード変換ツールを使う必要があります。
あるいは秀丸に漢字コードの変換機能があればそれを使うのも手でしょう。

ところで、出力されたdata.textを秀丸で開いた場合はどうなのでしょうか?
自動判別がonになっているのであれば、文字化けはしないと思うんですが…。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ