• ベストアンサー

さくらインターネットのCGIの文字化け

さくらインターネットのCGIで作ったメールフォームで送信すると文字化けしてしまいます。容易に直ると思いきや、まったく手の施しようがありません。どなたか教えていただけますよう宜しくお願いします。 さくらインターネットには解決方法として以下の方法が挙げられています。具体的な方法を聞いたところサービスの対象でないとのことでした。 「MacOS X」と、ウェブブラウザ「Safari」や「Internet Explorer (IE)」の一部のバージョンの組み合わせで、記号を入力すると文字化けを起す現象が報告されています。ブラウザの仕様またはバグによるものと考えられますので、ブラウザを変えてお試しください。 過去に文字化けになった方の質問も多くあるようでかぶってしまい申し訳ないのですが具体的な対処方法を宜しくお願いします。

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.6

>もし他に対処法を思いつかれるようでしたら是非お教え下さい 一点思いつきました。 送られてきたメールのヘッターをみてください (OutlookExpressであればメールを選択し右クリック→プロパティ→詳細) Content-type: text/plain;charset="ISO-2022-JP" が記述されているでしょうか? もし、 Content-type: text/plain; だけでしたら、 "Content-Type: text/plain;\n\n"; と記述されているところを探して、 "Content-type: text/plain;charset=\"ISO-2022-JP\"\n\n"; に書き換えてみてください

tigerman
質問者

お礼

いろいろ教えてくださり本当にありがとうございました。 ジャングルという会社にはコンピューターの故障って言われました。 もう少し検討したいと思います。

tigerman
質問者

補足

こんにちは。ありがとうございます。 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit とありました。概ね良いようですが、 "" が無いのは関係あるのでしょうか?

その他の回答 (5)

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.5

SendMail.plのその箇所の最初に $charset = &jcode::getcode(\$body); を追加しただけで効果があるかも知れません (半角カタカナだけでメールが書かれたら文字化けしますが) formの中に判別用のコードを追加した場合は、 &jcode::getcode(\$form{'codeck'}); ※$form{'codeck'}はcgiの入力部に依存するので参考までに書いているだけです

tigerman
質問者

補足

こんにちは。素人の私にいろいろと教えていただきありがとうございます。 上記の事項や今までお聞きしたことをいろいろと試してみたのですが 特に変わった変化はありませんでした。 もし他に対処法を思いつかれるようでしたら是非お教え下さい。 もし見つからないようであれば、明日にでも一度cgi作成者に問い合わせてみようと思います。 お礼のポイントが最大20ポイントしかないことが大変悔やまれます。 宜しければもう少しお教えいただけますようにお願い致します。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.4

>ファイルのダウンロードというものが始まり actionのcgi指定先の問題かな?と思います (actionで送り先はhttp://~で指定してある訳じゃないですよね) $charset = 'sjis'; の一カ所で後で何に変換するかを決めていると思います &jcode'convert(*key, 'sjis'); ではなく、 &jcode'convert(*key, $charset); の様に書いてあるはず convertは、 SendMail.pl mimer.pl mimew.pl のどれか(or全部?)に入っていると思います ※どこかで配布されているcgiでしたらurlを書いてみてください

tigerman
質問者

お礼

mimer.plに以下の記述がありました。 ## charset=`ISO-2022-JP',encoding=`B' の encoded-word にマッチするパターン $match_mime = '=\?[Ii][Ss][Oo]-2022-[Jj][Pp]\?[Bb]\?([A-Za-z0-9\+\/]+)=*\?='; SendMail.plには以下の記述がありました。 # 半角カナを全角カナに変換,文字コードをJISに変換 &jcode::convert(\$to_name, 'jis', $charset, 'z') if $to_name; &jcode::convert(\$from_name, 'jis', $charset, 'z') if $from_name; &jcode::convert(\$subject, 'jis', $charset, 'z') if $subject; &jcode::convert(\$body, 'jis', $charset, 'z'); 3回見直しましたが、これ以外には見当たりません。

tigerman
質問者

補足

お返事ありがとうございます。 配布はされてないんです。 ビルダーのデザインテンプレートビジネス版で、ジャングルというところが出しているものです。設定は簡単に出来るように説明書には書いてあるのですが、今回の件以外にも修正ばかりです。。 一度今回教えていただいた修正を試してみます。 本当にご丁寧にありがとうございます。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.3

<form action="mail.cgi" method="POST"> ~省略~ <input type="hidden" name="codeck" value="あいうえお"> </form> のようにformの中に識別用のコードを入れます。 cgiの最後辺りに、 sub conv_s{ my($dt,$ck)=@_; my($n,$icode)=&jcode'getcode(\$ck); $$dt = &jcode'sjis($$dt,'euc') if($icode eq 'euc'); $$dt = &jcode'sjis($$dt,'jis') if($icode eq 'jis'); } こんな感じのサブルーチンを置き、 &jcode'convert(*key, 'sjis'); などとconvertを使っている所を conv_s(\$key,$form{'codeck'}); に置き換えます(※入力データが$form{'codeck'}に入るかどうかはcgiの中身を見てください)

tigerman
質問者

お礼

ANo.4の補足です。 それぞれの番号のファイルに以下の記述がありました。 (1)FormData.pm #--半角カナ→全角カナ変換---------------- &jcode'h2z_sjis(*value); &jcode'convert(*value,'sjis'); (2)KCatch.pm if( $argv->{jcode} and defined $jcode::version ) { 1 if defined $jcode::version; # (not typo) foreach my $str ( @$oarray ) { &jcode::convert( \$str, $argv->{jcode} ); jcodeのファイルにはjcode convert が良く出てきます。 この辺も関係あるのでしょうか?

tigerman
質問者

補足

こんばんは。ご丁寧にありがとうございます。 <input・・・あいうえお">の部分をhtmlに入れてみました。下には何も無かったのでビルダーのプレビューから試しに送信してみました。 すると、ファイルのダウンロードというものが始まり、終わる気配がありません。そこで一旦閉じてビルダーを開けてみると修正があるとのコメントと同時にcgiが自動的に出てきました。 cgiも見てみたのですが、&jcode'convert(*key, 'sjis');などとconvertを使っている所はありませんでした。変わりに、 エンコード$charset = 'sjis';というのがありましたが何か関係あるのでしょうか? このcgiは、他に contact_conf.inc  contact_error.inc  contact_thanks.inc   body  mac  default_css.js      win_ie.css     win_nn.css   FormData.pm   KCatch.pm    SendMail.pl   mimer.pl  mimew.pl  jcodeがあります。 jcodeには、&jcode'convert(*line, $ocode [, $icode [, $option]]) というものがあるのですが、教えていただいたものは見当たりません。これでよいのでしょうか?

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

機種依存文字を使用してませんか?

tigerman
質問者

補足

こんにちは。コメントありがとうございます。 機種依存文字について調べてみたのですが、使ってはいないと思います。通常の漢字なら問題ないのですよね。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

恐らくShift JISやEUCなどのコード判定でミスがでるのだと思います (jcode.plなどで変換しているんですよね?) この場合はメールフォームに隠しフィールドを追加して、 <input type="hidden" name="codeck" value="あいうえお"> などとしておき、 cgi側で何のコードがこれで判定して決めうちで変換するようにすれば治ると思います

tigerman
質問者

お礼

(1)シフトJISですと、お名前、メールアドレス、内容、送信内容をご確認の上、ご送信下さい、などのこちらが用意したタイトルや文章は文字化けしません。 (2)Unicode(UTF-8)ですと、相手の回答内容だけが文字化けしません。 (3)EUOですと、どちらも文字化けします。  補足の補足ですがお願いします。

tigerman
質問者

補足

こんにちは。ご丁寧にありがとうございます。 jcode.plで変換しているかどうかわかりませんが、jcode.plファイルがあるのでそうだと思います。 <input type="hidden" name="codeck" value="あいうえお"> は具体的にどの場所に置けば良いのでしょうか? 追加の質問になりますがどうか宜しくお願い致します。

関連するQ&A