- ベストアンサー
ショッピングカートのクッキー機能、及びメール文字化けについて
- ショッピングカートのクッキー機能に関する問題と、自動返信メールの文字化けについて解決方法を教えてください。
- 問題1は環境によってクッキーエラーが表示されることであり、クッキー受け付け設定に関係なく発生することがあるようです。マックユーザーだけでなく、ウィンドウズ(IE)でも起きることがあります。また、問題2は注文完了後の自動返信メールが文字化けする問題です。使用しているOutLookExpressでは問題が起きないようですが、他の場合には起きることがあります。
- 問題の原因は不明ですが、解決方法としては、クッキーエラーは一度表示されても再度アクセスすると消えることがあるようです。クッキーに関連するCGIスクリプトの中で特定の記述を見つけることができました。自動返信メールの文字化けはSHIFT-JISで書かれたメールヘッダやフッタ、HTMLの文面に関連しているようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>要求ヘッダというのは、http://www.studyinghttp.net/cookies >このサイトにあるような形のものでしょうか。 これは、サーバーからの応答ヘッダです。 確認は、fie\refox3.57 + LiveHTTP hedarsが分かりやすいです。 現状、firefox3.6には未対応のようです。 >要求ヘッダにcookieがない状況を作り出したり、自分の使っているブラウザにあるかどうかを確認する方法はありますか? これもFirefoxが楽です。ツール→プライバシー→Cookieで、サイトごとのCookieの確認や削除ができます。 >大変恐縮ですが、Cookieを発行して、再読み込みをするには、どのように書き換えればよいでしょうか。 ブラウザからの要求ヘッダに、 Cookie: ************************** がないとき、簡単なHTMLを Set-Cookie付で発行します。HTML自体はrefreshを短時間で設定すれば良いですね。 再要求の要求か否かは、QUERY_STRINGかHTTP REFERERなどで判別してください。 >(2)文字化けについてですが、&jcode::convert(\$messagen,'jis'); >のような変換を行うようにしました。これで正しく回避できているでしょうか? そうです。 当然、ヘッダの該当部分も Content-Type: text/plain; charset=ISO-2022-JP に変更してください。 また、メッセージタイトルに日本語が含まれる場合はBase64エンコードが必要です。 Subject: =?ISO-2022-JP?B?[この部分Base64エンコードされた文字列]=?= 詳しくは適当なメールフォームCGIのマニュアルをご覧ください。
その他の回答 (2)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
ISO-2022-JPに変換後Base64エンコードですから use MIME::Base64; **************** $encoded_data = encode_base64($data); で、 print MAIL "To: $email\n"; print MAIL "From: $myaddress1\n"; もbase64で変換すると 日本語 <abc@hoge.com> も扱えるよ。
お礼
本当に本当にありがとうございます!!!!!!!! 無事、すべて解決致しました。 感謝感謝です。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
Cookieは、ブラウザからの要求ヘッダに含まれていないと、そのように判定する場合があります。要求ヘッダにcookieがない場合は、Cookieを発行して、再読み込みをするようにしましょう。 >CGI、メールヘッダ、フッタ、HTMLの文面はすべて、SHIFT-JISで書かれています。 >なんとか文字化けが起きないようにしたいです。 これは、間違いです。 必ず、ISO-2022-JP にしましょう。 またヘッダは、Base64エンコードしましょう。 RFC2822 ( http://www.puni.net/~mimori/rfc/rfc2822.txt ) RFC2821 1~3章 ( http://www.puni.net/~mimori/rfc/rfc2821a.txt ) RFC2821 4,5章 ( http://www.puni.net/~mimori/rfc/rfc2821b.txt ) RFC2821 6章~ ( http://www.puni.net/~mimori/rfc/rfc2821c.txt )
補足
回答ありがとうございます。 (1)について、 要求ヘッダというのは、http://www.studyinghttp.net/cookies このサイトにあるような形のものでしょうか。 要求ヘッダにcookieがない状況を作り出したり、自分の使っているブラウザにあるかどうかを確認する方法はありますか?(検証のためです。) 大変恐縮ですが、Cookieを発行して、再読み込みをするには、どのように書き換えればよいでしょうか。 (2)文字化けについてですが、 &jcode::convert(\$messagen,'jis'); のような変換を行うようにしました。これで正しく回避できているでしょうか? (私自身のOutLookExpressでは元々文字化けが起きず、検証できずで…すみません。)
補足
再びの回答ありがとうございます! (1)については、あらかじめクッキーを発行することで、対応することができました! 今のところ、正常に動いているようです。 (2)の文字化けについては、 件名の変換方法で止まっております。 送信しているところは、このとうな感じです。 ----------- if($emailh eq "1"){ if (!open(MAIL,"|$sendmail $email")) { &error; } &jis("Subject:$confmailtitle"); print MAIL "$msg\n"; print MAIL "To: $email\n"; print MAIL "From: $myaddress1\n"; print MAIL "Content-type:text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding:7bit\n"; print MAIL "\n"; print MAIL "$header\n"; $count = 1; while ($count <= $ncount ){ &sub2;} print MAIL "$messagetotal"; print MAIL "$message\n"; print MAIL "$footer"; close(MAIL); } sub jis { $msg = $_[0]; &jcode::convert(\$msg, 'jis'); } ----------- $confmailtitleを変えていけばよいと思うのですが、 うまく行きません…。 どのように変換するのがよいのでしょうか?