【PR】  >

【PR】 ホテル・旅館の検索なら楽天Travel
【PR】 ADSL1Mコース・プロバイダ比較
 

EUCのページでmailtoのサブジェクトを指定するには?



【格安パソコンなら!ソーテックオンラインショップ!】

【重要なご注意】 このページのコード例をご利用になられる場合は、メールアドレスの部分は必ず書き直してください。当サイトのメールアドレスでコードを公開していたところ、ろくにテストをされていないのか、当サイトのメールアドレスに間違いの注文メールや予約メールが多数届くようになり、このような初歩的なミスをする人が意外にも多いことに、大変驚いています。メールアドレスのドメインをexample.comにした上で、@は全角文字にしてあります。)

mailtoリンクを使って、訪問してくれたユーザーからの意見を集めるのは、Webmasterにとって非常に意味のあることです。あらかじめこちらが定めたサブジェクトを指定するやり方も非常に簡単で、<a href="mailto:example@example.com?subject=文字化けについて"></a>などとすればいいのです。これで件名(サブジェクト)が「文字化けについて」という新規メール作成画面が現れます。お便りはこちらで、実際にメールソフトの新規メール作成画面が表示されるはずです(一部メールソフトは対応していません)。

件名だけでなく、本文を指定することも可能です。例えば、どのページのmailtoをクリックしたのかを知りたい場合は、Javascriptと組み合わせて、

<script language="Javascript">
<!--
   document.write("<a href=\"mailto:example@example.com?subject=文字化けについて&body=");
//URLのエスケープ処理を忘れると&を含むURLでは&以下が無視されてしまいます
   document.write("参照元: " + escape(document.URL));
   document.write("\">お便りお待ちしております</a>");
//-->
</script>
<noscript>
<--Javascriptがoffの人からもお便りをいただけるように、noscriptも忘れずに-->
<a href="mailto:example@example.com?subject=文字化けについて">お便りお待ちしております</a>
</noscript>


左のようにコーディングすればいいでしょう。実例:

ところが今まで申し述べてきたことは、実はホームページの文字コードがShift_JISの場合にのみ有効であり、EUC-JPで作成している場合には、下記のように文字化けします。


これは、WindowsでもMacでも文字入力に使われる文字コードはデフォルトでShift_JISであるため、全ての入力はShift_JISであると解釈されるためです。つまりEUC-JPのコードを無理やりShift_JISで読む結果、文字化けが発生しています。

-- 2007年2月19日追記start --
実は、Shift_JISのページであっても、新OS・VistaのWindows Mailでは、プリセットした本文が文字化けします。件名は文字化けしません。詳細は、「WEBプログラミングNOW!! 『VistaのWindows Mailとmailtoタグによる本文のプリセット(文字化け問題)』」をご参照ください。少なくとも本文のプリセットは、HTMLページの文字コードによらずあきらめたほうが無難かもしれません。後述するURLエンコードによる解決方法は、ThunderbirdなどMozilla系メールソフトで問題を引き起こしますし・・・。
-- 2007年2月19日追記end --

であれば、どうすれば良いでしょうか? URLエンコードを利用します。Shift_JISでURLエンコードするためには、 をご活用ください。「文字化けについて」をURLエンコードすると、「%95%B6%8E%9A%89%BB%82%AF%82%C9%82%C2%82%A2%82%C4」になります。また、「参照元: 」をURLエンコードすると「%8EQ%8F%C6%8C%B3%81F%20」になります。

右のようなコーディングになります。このようにShift_JISで予めURLエンコードしておけば、Shift_JISのページでもEUC-JPのページでも利用可能です。(ただし、一部のネットスケープ系メールソフト(Mozilla Thunderbirdを含む)やWindows版Outlook Express5.0などでは、通常のmailtoはできても、サブジェクトなどをURLエンコードするとうまく動きませんでした。さらに、mailtoプロトコールと関連付けられたメールソフトが何であれ、Mac OSXの標準ブラウザであるSafariからは、この形式のリンクは有効になりません。URLエンコーディングがアダになっています。)

ここで、重要なことは、EUC-JPのページだからといって、EUC-JPでURLエンコードするのではなく、Shift_JISの文字列をURLエンコードしてプリセットしておくという点です。EUC-JPでURLエンコードしておいても文字化けします。(メールは実際にはJISで送信されますが、実際にWindows用Outlook ExpressやMac版のそれで書いている段階ではShift_JISで入力しているのであり、それをメールソフトが送信段階においてエンコード=文字コード変換してくれています。)



<script language="Javascript">
<!--
//ネットスケープ4.Xで表示が乱れるため、URLエンコード部分に改行を入れていますが、本当は改行なしです。
   document.write("<a href=\"mailto:example@example.com?subject=
%95%B6%8E%9A%89%BB%82%AF%82%C9%82%C2%82%A2
%82%C4&body=");
   document.write("%8EQ%8F%C6%8C%B3%81F%20" + escape(document.URL));
   document.write("\">お便りお待ちしております</a>");
//-->
</script>
<noscript>
<a href="mailto:example@example.com?subject=%95%B6%8E%9A%89%BB%82%AF%82%C9%82%C2%82%A2%82%C4">お便りお待ちしております</a>
</noscript>

さらに、URLエンコードを利用すれば、本文に改行を含む文章をプリセットできます。Windowsでは、改行コード「CRLF」ですが、このURLエンコードは「%0D%0A」です。一方、Macの改行コードは「CR」ですが、このURLエンコードは「%0A」です。

では、改行ありバージョンのサンプルのコードを紹介しますと、
<script language="Javascript">
<!--
   var Mac = navigator.userAgent.indexOf("Mac") != -1 ? true : false;
   document.write("<a href=\"mailto:example@example.com?subject=%95%B6%8E%9A%89%BB%82%AF%82%C9%82%C2%82%A2%82%C4&body=");
   document.write("%8EQ%8F%C6%8C%B3%81F%20" + escape(document.URL)); //参照元:
   //改行コードの指定をWindows版の「CRLF」だけにすると、Mac版IEで「LF」を解釈できず、一文字「□」が長細いくなったようなものが表示されます。
   if(Mac){
      document.write("%0D%0D"); //Macの改行コードは「CR=%0D」
   } else {
      document.write("%0D%0A%0D%0A");//Windowsの改行コードは「CRLF=%0D%0A」
   }
   document.write("%82%A8%96%BC%91O%81F"); //お名前
   if(Mac){
      document.write("%0D");
   } else {
      document.write("%0D%0A");
   }
   document.write("%83%81%81%5B%83%8B%83A%83h%83%8C%83X%81F"); //メールアドレス
   if(Mac){
      document.write("%0D");
   } else {
      document.write("%0D%0A");
   }
   document.write("%83R%83%81%83%93%83g%81F"); //コメント
   document.write("\">(改行ありバージョンのサンプル)お問い合わせはこちら</a>");
//-->
</script>
<noscript>
<!--ネットスケープ4.Xで表示が乱れるため、URLエンコード部分に改行を入れていますが、本当は改行なしです。-->
<a href="mailto:example@example.com?subject=%82%A8%96%BC%91O%81F%0D%0A%83%81
%81%5B%83%8B%83A%83h%83%8C%83X%81F%0D%0A%83R%83%81%83%93%83g%81F">(改行ありバージョンのサンプル)お問い合わせはこちら</a>
</noscript>




のようになります。

もちろん、subjectや本文をプリセットしていても、ユーザーは自由に書き換え可能ですし、また一部のメールソフトが対応していないという問題があります。CGIで作成した方がよっぽど良いでしょう。しかしながら、例えば、「友達にこのページをすすめる」というリンクを作成し、CGIを設置するとセキュリティ上、問題があります。スパマーに悪用される可能性です。FromやToを自由に設定できるということは、常にそういう危険性が伴います。一方、このmailtoであれば、発信者は"一応"スパマー本人ということになりますし、何よりもサイト運営者である私たちに責任が及びにくいというメリットがあります。

サンプル: (クリックしてください)

のように作成することも可能です。このページのエンコードはShift_JISになっていますので、EUC-JPでも本当に動くか確認できませんので、 を準備しました。また、このプログラムのソースは を参照してください。

次のページでは、半角カタカナについて考えます。半角カタカナはなぜインターネットでは駄目と言われているのか、また掲示板などでユーザーが入力してきた場合、どのよいに対処すべきかなどを考えます。