WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perl ディバッグについて・もしか改行コード?

0:[投稿] マイム野口 [URL] [2003/04/07 20:27 ][環境:win98 ie6 opera6 Apache perl]

いつもお世話になっています。マイム野口です。
今回は、カートシステムにて商品ファイルを1から5まで作成しているのですが、2と3のファイルでは、正常に動作するのですが
1のファイルと4のファイルで動作以上が発生します。

1と4のファイルにおいても、最終の行の商品をカートに入れる場合は、正常に動作します。(同じ品を2回購入した場合)
原因がわからず、色々試しているのですが解決にいたっていません。(もしかすると改行コードに起因?)
みなさまにアドバイスを頂きたく書き込みます。
よろしくお願いします。


1:[回答] バギンズ [2003/04/07 23:26 ]

デバッグ方法について

その1.部分的な処理の動作確認をする場合

CopalまたはCopal2を使用する。
http://homepage1.nifty.com/kaityo/copal.html
http://homepage1.nifty.com/kaityo/copalpro/index.html

ちょっとした処理の動作確認には本当に便利です。

その2.全体的な処理の流れを確認をする場合。

デバッグ用のログファイルの出力関数を作って、要所要所でログファイルに情報を書き込む様にして流れやデータを確認する。

>(もしかすると改行コードに起因?)
とか思っているなら、その部分をCopalで動作確認したり、データをログファイルに書き出してみるのがいいかと思います。


2:[回答] マイム野口 [2003/04/08 12:53 ]

バギンズ さん 
この度も、有り難うがとうございます。
Copalという便利なソフトを、お教え頂き感謝しています。
問題は、原因究明には至ってはいないのですが、どうも文字が
の種類によっては、正常に動作します。
そこで、またまた教えて頂きたいのですが、$color に「ピンク」の文字が入る場合は正常で、「ブルー」という文字がはいるとエラーになるのですが、お心当たりのある原因をアドバイス頂けないでしょうか。
よろしくお願い致します。


3:[回答] 薫 [2003/04/08 14:21 ]

長音「ー」の2バイト目が「\」と判断されているのでは?
文字コードを変換(&そろえる)といいかもです。

http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP


4:[完了] マイム野口 [2003/04/08 17:58 ]

薫 さん 有り難うございました。
原因がわかりました。
アドバイスどうりのようです。とりあえず回避策として
長音「ー」の代りにマイナス「−」の文字を使うことにしました。
現在は、require "./jcode.pl";にてShift_JIS コードに変換していますが、ご提案頂きましたサイトにて勉強してから変更していきます。
有り難うございました。
これからもよろしくお願いします。


5:[保留] ひじ [2003/04/08 20:26 ]

>>3
"ー"のShift_JISコード番号は815Bです。
5BはASCIIの"["に相当します。

'や"で囲んだだけではエラーは起きないはずです。正規表現で使っているのかと思いますが。
どちらにしても、CGIスクリプトの内部コードはEUC-JPかUTF-8にするのが無難です。

で、今 http://select1.cool.ne.jp/cgi-bin/shop1/cartsystem01.cgi のURLを参照すると、うちのブラウザではHTMLソースがそのまま表示されました。
http://webtools.mozilla.org/web-sniffer/ でHTTPヘッダを見てみると、 Content-Type: text/plain と。
これではまともなブラウザではソースがそのまま表示されてしまうはずです。


6:[質問] マイム野口 [2003/04/09 19:11 ]

ひじ さん、アドバイス有り難うございます。

CGIスクリプトの内部コードをEUC-JPにするべく、いろいろわからないまま試してみました。
スクリプトの内部コードをEUC-JPにするとは、
charset=EUC-JPとしたCGIファイルを、EUCに変換してFTPにて転送する事なのでしょうか。
それとも、内部の変数の文字コードを、cgi-lib.plを参照させてもらい&jcode::convert(\$***, "euc")として変数の文字コードだけをEUCに変換することなのでしょうか。
またその両方をすることなのでしょうか。
メール送信をすると、
print MAIL "商品名 $name \n";のようにすると、「商品名」が文字化けしたメールとなり、またまた質問することとなりました。
どうか良きアドバイスをお願いします。


7:[回答] ひじ [2003/04/09 22:17 ]

>>6
>charset=EUC-JPとしたCGIファイルを、EUCに変換してFTPにて転送する事なのでしょうか。
のほうです。EUC-JPやUTF-8の非ASCII文字はASCII文字と衝突しないので、正規表現の特殊文字を使ってしまうことがありません。

メールについては、CGIとは話が異なるため、別に投稿します。


8:[回答] ひじ [2003/04/09 22:41 ]

>>6
メールの送信はHTTPではなく、SMTP(RFC2821で規定)を使って行われます。歴史的な事情により、SMTPは7bitコードしか通せないようになっています。

日本語の文字を表現するには8bit必要なので、従来の符号化方式ではSMTPを用いてメールの送受信を行うことができません。そこで、JUNETで議論が行われ、その結果、ISO-2022-JPという文字符号化方式が作られ、メール等の送受信でこの文字符号化方式が使われることになりました。現在でも、日本語メールの送受信ではISO-2022-JPを使用します。

要するに、メールの場合はISO-2022-JPに変換して送信するのがよい、ということです。Shift_JISやEUC-JPをそのまま送ってはいけません。


9:[完了] マイム野口 [2003/04/10 07:51 ]

バギンズさん、薫さん、ひじさん
有り難うございました。
皆様からのアドバイスに感謝致します。
頂きましたアドバイスを元にして、改善していきます。
また解らないことができたときは、相談の書き込みをさせて頂きます。
これからもよろしくお願いします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World