- ベストアンサー
POSTで受けたデータを jcode.pl するには
あまりに初歩的で書き込むのが恥ずかしいです。 今、フォームからアンケートを自分宛にE-Mailで もらえる CGI を書いています。 日本語処理以外の部分はほとんど全部動きました。 しかし、日本語のテキストは、メーラ(NC4.7付属) で受信すると、「%ほにゃらら」みたいな表現に なっていて、そのままでは読めません。 jcode.pl の使い方が間違っているらしいことは 簡単に推測できますが、ではどうまちがっている のか見当がつきません。 内容: アンケートのフォームで使用しているフィールド名 は、value01~value66です。 そこで、Actionで指定している cgi で、以下のように 記述してみました。 #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; #日本語コード変換処理 &jcode'convert(*value,'jis'); #連想配列に読み込み &ReadParse (*value); $to = 'nydela@imasy.or.jp'; $ipaddr = $ENV{'REMOTE_HOST'}; この後、メール・ファイルを開いてSendMail してやると、66個のフィールドが全部届き ますが、日本語は読めません。jcode.pl と cgi-bin.pl は、この cgi と同じディレクトリに あります。 日本語が入力される可能性のあるフィールド 番号は分かっているので、&ReadParse の後で 個別に convert したらいいのかと思ったのですが、 今度は連想配列の要素を jcode'convertに どうやって渡したらいいのかわからなくなりました。 アドバイスお願いします。 あと、どういうわけか、 $ipaddr = $ENV{'REMOTE_HOST'}; も、ブランクしか帰しません。ちなみに$ENVを たとえば PATH に変更しますと、きちんとその 値を返します。これもアドバイスお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
関連するQ&A
- jcode.pl と &ReadParse()
CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。
- ベストアンサー
- CGI
- jcode.plの使い方
最近cgiを始めたばかりの者です。 HTMLでフォームを作り、 FORM action="view.cgi"method="GET" でcgiに渡すようにしました。 CGIで受け取った文字に全角があると %83%8B%83i%83e%83B%83N%83X のような文字化けをします。 調べてみたところjcode.plを使えば 文字化けを回避できるようですがうまく いきませんでした。 質問1.jcode.plを読み込ませるのは 上記のview.cgiで良いのでしょうか。 質問2.require "jcode.pl";といれた後 具体的にどのように受け取ったデータを jcodeに渡せばいいのでしょうか? @data = split(/&/,$ENV{QUERY_STRING}); で@dataに受け取った情報を渡しています。 ご教授頂ければと思います。 よろしくお願いします。
- ベストアンサー
- CGI
- CGIでjcode.plを読み込めなくなりました
さんざん検索をかけて色々試したのですが、どうしても解決できず どなたかご存知のかた、教えてください。よろしくお願い致します。 つい昨日までちゃんと動いていたCGIが突然 「jcode.plがありません」 と訴えてきました。 4月にサーバーを乗換え丸2ヶ月、問題なく動いていたのに 突然です。何がなんだか分かりません。 もちろん、このCGIに関わるファイルは一切いじっておりません。 自分なりに検討した結果 引っかかっているのは以下のコード # 漢字コード変換ライブラリを読み込む if (-f "jcode.pl") { require "jcode.pl"; } else { &errexit("jcode.plがありません。\n"); } -略- &jcode'convert(*tmp, $kcode_cgi); このふたつです。jcode.plを読み込めない為にもれなく後出の呪文が効かないんだろうなという事は推測しているのですが。 このためフルパスでも試しましたが変化なし。 この読み込みをしなければ、CGIは取りあえず表示します。 なので、日本語変換プログラム以外は正常に動作しているようです。 どなたか同じような経験の有る方いらっしゃいませんか? アドバイスよろしくお願い致します。
- ベストアンサー
- CGI
- jcode.plについて
次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__
- ベストアンサー
- Perl
- jcode.pl
日記などのスクリプトを作成しているのですが、とりあえず今まで、そこまでの理由もわからず他のスクリプトに習ってjcode.plをデコード処理部で &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); のように使ってきました。 ですが、たまたま今回、jcode.pl等を書き忘れてしまったのですが、ブラウザから投稿してみても文字化けという文字化けが起こりません。スクリプト自身はsjisで書いています。ログファイルもどうやらsjisコードで書き込まれているようなのですが、それでもjcode.plは必要なのでしょうか。windows XP にApache + Active Perl での動作と、@niftyで設置して動作を確認しました。 この場合、jcode.plは必要あるのでしょうか?
- ベストアンサー
- Perl
- jcode.plアップロード不要の場合の設定変更
CGI設置にあたり、設定変更で悩んでいます。 jcode.plがサーバーにプリインストールされているためアップロードは不要で、require 'jcode.pl'; と記載するようにとのことです。 require "./jcode.pl"; となっているものについては問題なかったのですが、 $jcode = './jcode.pl'; 中略 require $jcode; と記述されているものを、どのように書き換えたらよいのか分かりません。 ご教授のほど、どうぞよろしくお願い致します。
- 締切済み
- CGI
- 「jcode.pl」が正しく配置されているのかどうか、判断に困っていま
「jcode.pl」が正しく配置されているのかどうか、判断に困っています。 サーバー移転後の動作確認中、上記のことで悩んでいます。 このファイルは(日本語文字コードに関するプログラムですよね?)メールを送信することに関わるフォルダの中に入っており、「send.cgi」の中にも「require './commons/jcode.pl';」のように書き込まれています。この「send.cgi」は問題なく動き、メールも送信できます。 以上の状態で、「jcode.pl」はサーバーに正しく配置されたと判断してよいでしょうか? なぜ疑問に思うかと申しますと、 「http//:xxxx.com/xxxxxx/mail/commons/jcode.pl」 のようにURLをうちこんで表示させようと試みたときに、 「Internal Server Error」が表示されるのです。 これはどういうことでしょうか? 「jcode.pl」が正しく配置されていないということでしょうか? ちなみにパーミッションは旧サーバーと同じにしました。 どなたか、ご指導いただけますと幸いです。 よろしくお願いします。
- ベストアンサー
- ハードウェア・サーバー
- jcode.pl 使い方
いままで、日本語を使わなかったのですが、 今、開発中のCGIでは日本語を処理しています。 ローカルサーバでのテストでは問題なかったのですが、βテストを開始してみると、環境によって文字化け。 出力する同じHTMLの中に場合によってEUCとS-JISなどが混在する状況になってしまいました。 そこで、jcode.plを使用し、コードの統一を行おうと思うのですが、日本語での解説ページまた、使用方法を解説している質問、回答が見つからなかったので、関数の使用方法を教えていただきたく思います。 私は、英語がすごく苦手なのでjcode.plの中の使用方法を見ても全く読めなかったのです。 日本語で分かりやすく書いていただけると幸いです。
- ベストアンサー
- Perl
- cgi-lib.plのReadParse関数
あるパールからcgi-libを呼び出して、ReadParse関数を使おうとするとInternal Server Errorがでてしまいます。 パールの中身は #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); です。 そこで3行目と5行目の行頭に#をつけて飛ばすとパールは正常に動きます。 これってcgi-lib.plのReadParse関数がいけないんでしょうか? ダウンロードしたまま何も変更していないのに..... ちなみにサーバーのパールのバージョンは5.004のようです。
- ベストアンサー
- CGI
- Jcode.plを使用してコンバート
if($ENV{\'QUERY_STRING\'} eq \"\"){ read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'}); }else{ $buffer = $ENV{\'QUERY_STRING\'}; } @pairs = split(\'&\',$buffer); foreach $pair (@pairs) { ($name, $value) = split(\'=\', $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg; &jcode::convert(\\$value,\'sjis\'); $form_data{$name} = $value; } Getメソッドで文字「?a=あ」をperlのJcode.plを使用してコンバートしましたが、 ブラウザのURL表示部は「?a=%82%A0」となり、shift_jisの16進数表示されてしまいます。 クッキーに取り込んで表示しても??と表示されてしまいます。 何かしら変換しているみたいのですが、 変換方法はあってるのでしょうか?
- ベストアンサー
- Perl
- 質問者はスキーを始めたばかりで、上達意欲があるため新しいスキー板を購入したい
- 現在のレベルはインチキパラレルで、目標は今シーズンに2級、60歳までに1級になること
- 候補のスキー板はVOLKL DEACON 75、VOLKL RACETIGER SRC、HEAD V-SHAPE V8S、HEAD V-SHAPE V8、オガサカ KS-GX、オガサカ KS-GZなどで、予算は6万円程度
お礼
makorinさん回答ありがとうございました。 かなり腑に落ちました。ただ、まだよく理解 できていないので、ご紹介いただいた参考書で もういっぺん見直してみます。 どうも使っている参考書に問題がありそうな 気がしてきました。 また何かありましたらよろしくお願いします。