• ベストアンサー

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

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

  • CGI
  • 回答数7
  • ありがとう数3

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

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.7

秀丸の自動判別について補足です。 秀丸に限らず、基本的にエディタの「自動判別」はファイルの先頭部のデータの漢字コードを見て判別を行っているので、ファイルの先頭部にShiftJISのデータが入っていて、その後にEUCのデータが続くようなケースでは、エディタは漢字コードをShiftJISとして判断してしまうので、EUCの部分は文字化けして表示されます。 一度data.textのファイルを抹消してみて、ファイルサイズ0の状態でCGIを実行させるとどうなりますか?

koujin
質問者

お礼

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

その他の回答 (6)

  • cocky
  • ベストアンサー率57% (232/402)
回答No.6

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

  • dany
  • ベストアンサー率35% (27/77)
回答No.5

Windows上で扱う基本的な文字コードはshift-jis(sjis)です。 だから新規でテキストを作った場合などは何もしなければ sjisで保存されます。 セーブする時文字コードの指定とかできるんじゃないですか? 「自動判別」というのは読み込むファイルの文字コードを判別 する機能です。秀丸は使っていないので詳しいことは不明ですが、 offの状態でeucやjisのファイルを読ませると化けたりするのでは。 私が使っているWZ Editorでは[ファイル]-[文書の情報]で文字 コードを確認することができます。秀丸にも似たような機能が あるのではないかと。 IEにテキストを読ませて、[表示]-[エンコード]で調べてみるのも いいかも。違うコードなら化けます。

koujin
質問者

お礼

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

  • dany
  • ベストアンサー率35% (27/77)
回答No.4

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

koujin
質問者

補足

お返事ありがとうございます。 エディタは秀丸を使っています。 cockyさんの補足にも書いたのですが、秀丸で自動判別にしてあるので、EUCで書かれているのだと思っていたのですが・・? 初心者すぎる質問で恥ずかしいのですが、スクリプトを確認するにはどうすればいいですか? やっと、お二人の言いたいことが分かり始めたました(^^;たびたびすみませんがよろしくお願いします。

  • cocky
  • ベストアンサー率57% (232/402)
回答No.3

スクリプト自体の漢字コードは何で書かれてますか? あと、出力結果のファイルの内容は何で確認しましたか? スクリプトがShiftJISで書かれているのに漢字コードをEUCに変換したら、同じ文字でもコード体系が異なるためにif文でデータが一致しないのは当然だと思います。 またEUCで出力されたファイルをダウンロードしてメモ帳などで開いても、Windowsのメモ帳はShiftJISコードのテキストでないと文字化けしますから、それは文字化けするように見えてしまいますよね。 大事なのはdanyさんも書かれているように「文字コードを一つに統一する」ことなので、その点に注意してやり直してみて下さい。 プログラムそのものは文法的におかしいところはなさそうなので。

koujin
質問者

補足

迅速なお返事ありがとうございます。 すごく恥ずかしいのですが、漢字コードを何で書いてあるかという質問について、よくわからないのですが、とりあえず、秀丸で書いてて、文字コードを自動判別するようにしてあり、そのままプログラムを書いています。のでEUCになっているものだと思っているのですが・・? また、出力結果のファイルの内容はやはり、秀丸で開いています。

  • dany
  • ベストアンサー率35% (27/77)
回答No.2

あー、質問がよくわからないのですが、 「text.dataでは文字化けします。CGI上の文字は大丈夫なのですが」 というのは、 「ブラウザに表示されたフォームに文字を入力している時点では  化けていないのに、フォームデコードしたものになにがしかの処理を  加えると化けてしまう」 という意味でしょうか? cockyさんが書いているように、入力画面、 スクリプト内で文字コードを統一しないといけません。 また、shift-jisで書かれたスクリプトの中で「横浜」とか書くと 化けます。一番簡単なのはすべてEUCで統一することですかね。 ifに関しては、これだけの情報ではサッパリです。^^;

koujin
質問者

補足

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

  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

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

koujin
質問者

補足

ありがとうございます。一応、jcode.plを使ってはいるのですが・・。danyさんの補足に詳しく書きましたのでよろしければ、教えてください。ちなみにjcode.plは自分で書いていないので(あるのを拝借した)こっちに問題がある場合は特に詳しく教えてください。分かりにくい質問ですみません(^^;

関連するQ&A

  • 文字化け

    perl初心者です。 テキストボックスに入力した数値を計算して表示するCGIを作っています、(cgi-lib.plを使ってます。) 計算ボタンをクリックして表示される文字全てが文字化けしてしまうのですがブラウザソフトの表示→エンコード→日本語にするとキチンと表示されます、 これはブラウザソフトの設定がいけないのか、プログラムに何か手を加えると解決するのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • CGI(Perl)の文字化けについて

    WEBフォームからの入力データをHTMLに加工して表示するというシンプルなCGIプログラムなのですが、 全角スペースの後に全角カタカナが入ると、全角スペースの部分から後が文字化けしてしまいます。 他はきちんと表示されているのですが、全角スペースとカタカナが続いているのが良くないみたいで、文字化けしてしまうようです。 全角スペースを取ってしまえばいいのかと思い、WEBで検索して色々と試してみましたが、変わりません。。 このような場合はどういう対処をするのが一番いいのでしょうか。 文字コードはEUCを使っています。(WEBフォーム、CGIとも) 教えてください。よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 文字化け

    登録フォームを作成し、入力した内容でDBに追加を行うなかで、PHPmyadminで実際に見てみると文字化けしています。 レンタルサーバ(OS:linux) (1)登録フォーム(shift_jis) ↓各値を渡す (2)確認ページ(shift_jis) ↓各値をmb_convert_encoding(shift_jisに変更) (3)追加 すると文字化けします。 以前、cgi-lib.plを用いてperlで書いていたものは、 文字化けしていません。 どこがおかしいのでしょうか? ちなみに (1)登録フォーム(euc-jp) ↓各値を渡す (2)確認ページ(euc-jp) ↓各値をmb_convert_encoding(euc-jpに変更) (3)追加 としても文字化けしています。 (DBだけでなく、ページ全体も)

    • ベストアンサー
    • PHP
  • CGIプログラムを使った申し込みフォームをHTML形式のメールで送りました。ソースを開くと文字化けしてしまいます。

    CGIプログラムを使うことにより、WEB上から申し込みフォームを使って入力事項をHTML形式によりメールしました。しかし、ソースを開いてみると文字化けしています。 CGIプログラムは、Shift JIS で保存したものを送信しているのですが。。 どうすれば、文字化けしない、きれいなソースが見れるようにできるでしょうか?

    • ベストアンサー
    • CGI
  • フォームメールが文字化けします。。。

    cgiを使用したフォームメールについてですが、携帯のauとソフトバンクでフォームメールを利用した人からのメールが文字化けを起こしてしまいます。 そこで私が使っている、共用レンタルサーバ会社に連絡したら、 ”携帯端末に対応しているフォームメール CGI を自分で探して設置してくれ”と返事がありました。 そこで、色々探したのですが、見つかりませんでした。(よくわかりませんでした) 携帯端末に対応しているcgiはどこで見つければいいのでしょうか。 また、今のCGIに何かを付け加えることによって文字化けを起こさなくなるものなのでしょうか。わかる方いましたらお願いいたします。

    • ベストアンサー
    • CGI
  • メールフォームから届くメールが文字化けしてしまいます・・・

    私の通ってる学際で利用するホームページを作ってます。アンケートフォームに無料cgiのpostmailというものをつかわさせてもらっています。 KentWeb http://www.kent-web.com/data/postmail.html ですが、設置したメールフォームから届くメールの一部が文字化けしてしまいます。 調べたら半角カタカナを入力すると文字化けするみたいです。 半角カタカナを入力しても文字化けしない方法を教えて下さい。又、これの他にいいメールフォームcgi(無料)があれば一緒に教えて欲しいです。 学際がもうすぐなのでできれば早く教えて欲しいです。 舞

  • 入力フォームの文字化け

    webサイト上からの資料請求やお問い合せでフォームを利用しています。 送信があった場合、その内容がメールで送られてくるようにしていて、送信テストを行ってみると全角ハイフン(か、全角長音)の文字が ?? に文字化けしています。 プログラムを作成した制作会社に修正依頼をしたところ… 原因として、ページ(UTF)とメールの文字コードが違いが挙げられるとのことでした。 対策としてCGI(perl)上で文字を置き換えることは可能であるが、文字化けする可能性のある文字すべてにその処理をフォームの項目のそれぞれに施すとページの表示が遅くなる。 という指摘を受けました。 お客様にフォローを入れるため正確に受け取りたいので数秒の遅延であれば対策して欲しいと言ったところ「ページ表示が遅くなって途中離脱の危険が生じる」「普通の内容を入力した人に(ページ表示が遅い)犠牲にしてまで稀少なケースに対応する考えは改めた方がいい」といった回答が返ってきています。 フォームの入力欄の数としては8個程度で、名前や住所、お問い合わせ内容などごく一般的なものです。 文字置き換えの処理はページの表示にどれほど影響するものでしょうか。 また、別な理由で文字置き換えの処理はやめた方がいいなどありましたら皆さんのご意見をお聞かせいただければ幸いです。

  • 文字化け?

    鋼鉄戦記C21というオンラインゲームをやり始めたくてインストールして始めようとしたのですが、ランチャー画面の文字が□ばかりで何が書いてあるのか分かりません。 何とかゲームをスタートしたらパスワード入力などの文字も□ではありませんが文字化けのようになっています。 何か対処法はありませんか? そういえば、インストールのときに「発行元を確認できませんでした。このソフトウェアをインストールしますか?」とでました。 PCのOSはwindows7です。もしかしてまだ対応していないのでしょうか?

  • CGIフォーム無改行で途中から文字化け

    CGI(Perl)でsendmailを使ったメール送信ソフトを製作したのですが 改行のない中央文を入力すると途中(500字位)から文字化けしてしまいます。 対処方法を教えてください。改行が入ると問題ないです。

    • 締切済み
    • CGI
  • 文字化け

    フォームで情報を受け取るCGIを作りました。 (情報はメールで送るタイプではありません) ずっと順調に動いていたのですが、最近、 あるひとつのフォームに記入された情報が途中から文字化けすることが たまに起こるようになりました。(いつもではありません) 「入力内容が長いためか」「半角英数」を使っているのか、などなど 確かめましたが、私が試した場合には問題がありません。 なお、入力された情報はjcode.plでEUCにデコードしています。 みなさんお忙しいなか恐縮ですが、よろしくお願いいたしますm(_ _)m

    • ベストアンサー
    • CGI