• ベストアンサー

CGI.pm使用時の文字化けについて

よろしければヒントなどを頂ければと思っております。 PerlでのCGI.pmを使用したホームページを作成しております。 Formの作成時CGI.PMの機能である、textarea,radio_group,popup_menuといった部品を使用しているのですが、 ここで”料金”、”問合せ”といった漢字文字を選択値として指定していると、文字化けが発生しております。 対処についてご存知の方がいらっしゃいましたら、 ぜひご教授をお願いできますでしょうか。 宜しくお願い致します。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

以下のコードをためしたところ、文字化けは発生しませんでした: > perl -MCGI -e 'print $CGI::VERSION,"?n"' 2.46 > cat test.pl use CGI qw/:standard/; print popup_menu(-name=>'test', -values=>['料金'] ); > perl test.pl |hexdump -C (offline mode: enter name=value pairs on standard input) 00000000 3c 53 45 4c 45 43 54 20 4e 41 4d 45 3d 22 74 65 |<SELECT NAME="te| 00000010 73 74 22 3e 0a 3c 4f 50 54 49 4f 4e 20 20 56 41 |st">.<OPTION VA| 00000020 4c 55 45 3d 22 97 bf 8b e0 22 3e 97 bf 8b e0 0a |LUE="....">.....| 00000030 3c 2f 53 45 4c 45 43 54 3e 0a |</SELECT>.| 0000003a > 文字化けする場合の16進ダンプをチェックしてみては。 また、異なる漢字コードの文字が混在していないか、Charset情報が適切かどうかをチェックしてみるとか。

akira_kikaku
質問者

お礼

遅くなってすいませんでした。 ご回答ありがとうございました。

関連するQ&A

  • RSSリーダーのCGIによる文字化け

    問題はCGI使用の際、一部文字化けしてすまうことです。 RSSリーダーからlog出力の際に文字化けしてしまうようです。 http://www.candy-cgi.com/perl/RSS_reader_Type1.html こちらのCGIを利用しているのですが、構造を見てみると 1.RSSファイルをメインCGIが数分ごとに処理→2.logファイルに出力→3メインCGIがそれをHTML化して書き出す という風になってるようなのですが、1から2にかけて、ある文字が文字化けしてしまいます。 具体的には「~」の文字が「?」に変わってしまうのです。 もっと具体的に言えば、「もみあげちゃ~しゅ~」→が「もみあげちゃ?しゅ?」となります。 それ以外の文字はいまのところ文字化けするのを確認しておりません。 logファイルに書き出される時点で文字化けしているので、htmlに文字コードをきちんと書き記すなどの対策は効果がありませんでした。 解決ヒントになりそうなことでもあったら、よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIを用いて落としたデータの文字化け

    CGI(perlで作成)を用いて アンケート結果を保存しようとしていますが 文字化けすることが まれにあります あるデータが 岩 額抛・ と 表示されてしまいました なんと 入力されたのか 見当がつきません 解明する方法は ありませんでしょうか

    • ベストアンサー
    • CGI
  • cgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す

    何度もPerlのところで質問していますが・・・今回は ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います 以下の二つのファイルで構成しています(一部分だけ) ---form.html--- <form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data"> <textarea name="input_textarea" rows="20" cols="70"></textarea> <input type="file" name="File" size=32> <input type-"submit" value="ok"> ---upload.cgi--- [formからの情報を配列変数に代入するスクリプト・・・] use CGI; $query = new CGI; $filename = $query->param('File'); # ファイル名の取得 $type = $query->uploadInfo($filename)->{'Content-Type'}; 同じファイル名が無いことを確認して、保存 という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。 かなり省略してます。 さて、、問題となるのは ENCTYPE="multipart/form-data" とすると 配列変数にFORMからの情報がうまく入ってくれないということです、 かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った ファイルのアップロードができなくなってしまいます。 ENCTYPE="multipart/form-data" のオプションをつけて 配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。 テキストエリアを取り除くとファイルのアップロードはできます。 ただ、ファイルと入力したテキストを同時に処理することができないんです。

  • cgi→csvが文字化け

    (1)cgiで集計 (2)csvへのはきだし (3)検索用cgiで(2)のcsvを検索というプログラミングを作成しております。 ------- (1)のcgiをテキスト形式のlogでの出力は文字化け無し これを、csv形式で保存、出力するとどうしても文字化けしてしまいます。 使用しているcgiなどはすべて"sjis"設定にしているのですが、うまくいきません。 何かいい方法はありますでしょうか?

    • 締切済み
    • CGI
  • cgiの文章がHP上で見ると文字化けを起こしてしまいます。

    CGIが分からないので困っております。 以前業者に依頼してHPを作成してもらったのですが、文章だけですので自分で直したいのですが、文字化けが起こってしまいます。 申し込みをHPより受けてCGIでHP上にメールは送信できたことを知らせる表示がさせてあります。 その知らせる文書の中の「申込」の漢字だけが文字化けを起こして、変な字が出てしまいます。 「申し上げます。」の「申し」でも同じ現象がおこります。 どうすればよろしいでしょうか? お忙しいところ申し訳ございませんが、よろしくお願いいたします。

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

    CGIフォームについて質問です。 フリーのCGIを使用してメールフォームを制作したのですが、sendメールが文字化けしてしまい、対処法がわからず行き詰まっています。 UFF-8対応のメールフォームCGIなのですが、送られてきたメールが下記のように全角のみ文字化けしてしまっています(メールアドレスの部分は文字化けしていません)。//////////////////////////////////////////////////////// お問い合わせいただきましてありがとうございます --ご送信内容の確認------------------------ 以下の内容が送信されました。 /*-email ****@*****.com /*-???????????? ???????????????????????? /*-????????? ????????? /*-???????????????????????? ?????????????????? ------------------------------------------ お問い合わせに関しましては、営業日3日以内にご対応させていただきます。 いましばらくお待ち頂けますようお願いいたします。 ///////////////////////////////////////////////////////////// このCGIは今まで何度も使用してきた物なので、いつも通りsend.cgiの設定(FROMのメールアドレスや、メールのタイトルなど)を変更しました。 ただ会社のサーバに設置するので、CGIを置くフォルダが制限されていたため、指定通りのフォルダにsend.cgiを入れパーミッションの変更もhtml側のactionのパスも変更しました。 ちなみに会社のサーバのディレクトリは +cgi---send.cgi | | form.html となっています。 このCGIを動かすには「Jcodモジュール」がインストールされていないといけないので、それがインストールされていないからかと思い、サーバ管理者に聞いてみたところ「Jcode.pm」はインストールされているとの事でした。 「Jcodモジュール」と「Jcode.pm」は違う物なのでしょうか? いつも使用している物なので、おかしいなと思い、同じファイルをプライベートで使用しているサーバにアップした所、文字化け無しのメールがきちんと届きました。 send.cgiのソース(設定変更できる部分)は下記のように記述されています。 #!/usr/bin/perl ## 2007-04-08 Ver.5.2 #require 'jcode.pl'; use Jcode; #server check (SPAM CHECK) $this_server = $ENV{'SERVER_NAME'}; #CGIソース内で設定する場合は下記に書きます。 #※HTMLで設定している場合無視されます。 $sendmail = '/usr/sbin/sendmail'; @mailto = ('*****@****.co.jp'); $thanks_url = 'http://***.net/**/thanks_01.html'; $subject = 'お問い合わせ'; $return_subject = 'お問い合わせありがとうございます'; $return_body = <<"EOF"; この度はお問い合わせありがとうございます。 --ご送信内容の確認------------------------ 以下の内容が送信されました。 [[resbody]] ------------------------------------------ お問い合わせに関しましては、営業日3日以内にご対応させていただきます。 いましばらくお待ち頂けますようお願いいたします。 EOF この[[resbody]]の所が文字化けしている状態です。 上記の記述の後にもソースが書かれているのですが、ここはいつも一切いじりません。 form.htmlのエンコーディングも <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-type" content="text/html ; charset=UTF-8" /> となっています。 ネットで色々検索してみたのですが、解決策に行き着く事が出来ずこちらに投稿させていただきました。 よろしくお願いいたします。

    • 締切済み
    • CGI
  • AN HTTPDでCGIを起動すると文字化けする

    私はCGI(Perl)のテストに「AN HTTPD 1.42p」を使用していますが、それを使うとどうしても日本語が文字化けしてしまいます。 ブラウザのエンコードを変更しても文字化けしたままです。 正しく表示できるようにさせる方法ってあるんでしょうか?

  • cgi.pmを使ったcgiに変更したのですが・・

    http://okwave.jp/qa/q7449935.html すみません、間違えて解決を押してしまいました・・・解決していないです。 前回返信いただいた内容を参考に、cgi.pmを使ってみることにしたのですが、 上手くいきません。 ボタンが表示されなくなってしまいました。 perlのcgiは作り方が色々あって選択が大変です・・・・・ #!/usr/bin/perl # wT付けるとエラー # 2012/05/01 cgi.pm使用開始 require 'cgi-lib.pl';# cgi-lib.plを呼び出す require "jcode.pl";# jcode.plライブラリを組み込む ########################################################################### use strict; use CGI; my $q = new CGI; print $q->header(-charset=>"Shift_JIS"); print $q->start_html(-title=>"てすと", -BGCOLOR=>'#ffffff'), $q->li, # 空白? $q->center($q->h1('CGI.PM')), # 文字を大きく書く $q->br, $q->br, $q->li('<FONT color="brack">テスト?</FONT><BR>'), $q->li('<form action = \"***.cgi\" method=\"post\">');# ***.cgiにpostで送信 $q->li('<BUTTON type="submit"> テストボタン </BUTTON>'), $q->li('</form>'), $q->br, $q->strong("強調文字"), $q->br, $q->end_html; $q->hr, # 線を引く print "以下のパラメータを受け取りました。<BR>"; my ( $name, $value ); foreach $name ($q->param ) { print "$name:\n"; foreach $value ( $q->param( $name ) ) { print " $value\n"; } } exit;

    • ベストアンサー
    • CGI
  • CGIのテキストが文字化けします。

    PERL/CGI大全555という本についていたCDからスクリプトをコピーしましたが日本語が妙なカタカナに文字化けしていて使えません。スクリプトはウィンドウズ用とユニックス用がありWIN2000を使っているのでウィンドウズ用を開いているのですがだめです。何か考えられることはありますか?

    • ベストアンサー
    • CGI
  • htmlで呼び出したCGIの出力が文字化けする

    下記のInput.cgiというスクリプト(改行コードLF, 文字コードUTF-8) ---------------- #! /usr/bin/perl $method = $ENV{'REQUEST_METHOD'}; if ($method eq 'POST') { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } elsif ($method eq 'GET') { $buf = $ENV{'QUERY_STRING'}; } print "content-type: text/html\n\n"; print "メソッドは$methodでした。<br>\n"; print "受け取ったデータは$bufでした。\n"; ---------------- があります。これをブラウザで見ると(入力なしのまま) 「メソッドはPOSTでした。  受け取ったデータはxxxでした」 と正常に表示されます。 次に次の内容のhtml(改行はLF,文字コードはShiftJIS) ------------- <html><head> <title>FORMによるデータ転送</title></head> <body> <form method="POST" action="myInput.cgi"> <input type="text" name="text"><br> <input type=submit value="送信"> <input type=reset value="取消"> </form></body></html> -------------- をブラウザで表示させ、inputボックスに英数字(または日本語)を入力し、「送信」をクリックすると、今度はCGIスクリプト中の日本語を含めて総ての日本語出力が文字化けしてしまいます。 これが起きるのは、htmlとCGIの文字コードが異なるからでしょうか? 文字化けを止めるには何をすればよいのでしょうか? 教えて下さい。お願いいたします。