ツールチップを改行表示する(IEのみ)

ツールチップってのはリンクや画像などにマウスカーソルを合わせてしばらくするとポッと出てくるこんなやつね。これは汎用属性のTITLEの内容が表示されるもので、a要素やimg要素以外でも使用できる要素は多い。これを改行表示させるには改行したい場所に
を書く。ただしこれで改行表示されるのはIEのみなので注意。

title="改行したい場所に
を書く"

迷惑メール対策/メールアドレスはこう書こう

いわゆるスパムメールとかウイルスメールなど、いらないのに勝手に送りつけてくるメールへの対策です。ある程度訪問者の多いサイトでメールアドレスを公開していると、迷惑メールが結構来ると思いますが、特に自分のサイトを持っている人、どうですか?

やつらのやり方

まず、よく流行するワーム型ウイルスがどこから送信先メールアドレスを取得しているのか考えてみよう。セキュリティ関係のサイトのウイルス情報によると、これらのほぼすべてのウイルスが、OutlookやOutlook Expressのアドレス帳からメールアドレスを取得しているが、中には特定の拡張子や特定の場所にあるファイルからメールアドレスを拾っているものもある。例えば一時期大流行したSircamやKlezの亜種などがそうで、それらはhtmやhtmlという拡張子のファイル、またはTemporary Internet Filesというフォルダにあるファイルからもメールアドレスを取得する。ということは、もし、ウイルスに感染しているパソコンに、自分のメールアドレスが書いてあるページがブラウザのキャッシュなどの形で保存されていたら、自分宛てにウイルス付きメールが送られてくる可能性がある、ということだ。

では、スパムメールの場合はどうかというと、こちらは人間が、メールアドレス収集ロボットや専用プログラムでウェブページや掲示板などを巡回し、メールアドレスを取得している。やっていることはウイルスプログラムとほとんど変わらないが、より能動的作為的で、収集したメールアドレスを売買している業者や個人も存在するという点では、ウイルスプログラムより性質が悪い。ウイルスの破壊活動とかは置いといて。

ではどうするか?

ウイルスはメールアドレスの@(アットマーク)やmailto:を目安にメールアドレスを取得しているそうだ。ブラウザはソースにあるHTMLのタグや特殊文字などを処理して表示等するわけだが、現時点でそれをやっているウイルスはないと思われる。メールアドレス収集ロボットやプログラムもやっていることはたぶん同じ。そこで、HTMLのソースにはアットマーク自体を書かないか、メールアドレス内にタグを入れるなどして、ソースから直接文字を取り出しただけではメールアドレスとして機能しないように書けばいい。

対策その1:メールアドレスに余計な文字を加える

メールアドレスを正しくないものにしてしまう、という、一番簡単かつ確実な方法。例えば、aaaa@bbbb.ne.jpというアドレスだったら、1aaaa@bbbb.ne.jpとか、aaaadelete@bbbb.ne.jpみたいに、余計な文字を加えて書いておく。そして、「メールを送られる際は、お手数ですが○○○○という文字を取ったアドレスでお願いします。」と注意書きしておく。

この方法はまず間違いなくプログラムを欺けるのでおすすめと言えばおすすめ。メールアドレスがどこに書いてあっても使えるし、掲示板のメールアドレス欄にも本文で注意書きしておけば使えるしね。ただし、余計な文字が全角だったり、半角でも大文字だと効果のないものもある模様。メールする方はちょっとめんどくさいけど、まあ、これくらいならいいでしょ。

対策その2:@(アットマーク)を数値文字参照で書く

HTMLでは<などの特殊文字は文字実体参照で&lt;のように書く。これと同じような方法で、&#数値;のように、ユニコード(ISO/IEC-10646)の文字コードを直接指定する方法を数値文字参照という。数値文字参照ではアットマークは&#64;となるので、メールアドレスの@をこれと置き換える。例えば下のように書けばいい。

aaaa&#64;bbbb.ne.jp

実際、このサイトの各ページの下の方にあるmailto:のメールアドレスはそのように書いてある。試しにそのリンク(Tealの部分)をクリックしてみよう。使用しているメーラーのメール作成画面が現れたと思うが、その宛先のメールアドレスはちゃんと teal@hyper.cx になっているはずだ。この方法はメールアドレスがどこに書いてあっても使えるし、アットマークだけでなく、メールアドレスすべてを数値文字参照で書いてしまっても問題ない。

実は、数値文字参照をしっかりエンコードしてしまうプログラムもあるらしいのだが、現時点までに大流行したことのあるウイルスに限れば100%有効と思われる。以前、Sircamやklezが大流行したとき、他のサイトで公開しているメールアドレスには結構大量にそれらのウイルスメールが来ていたのだが、この書き方にしてからほどなくして、ほとんど来なくなったという実績がある。んだけど、未だにたまに来るんだよね、誰だか知らんけど(たぶん外人さん)ウイルス飼うのはやめましょー。

余談になるが、文字実体参照や数値文字参照は他にも様々な文字や制御コードを指定できる。このページの「ツールチップを改行表示する」で書いた&#13;も、実は数値文字参照で改行コード(キャリッジリターン)を指定していて、IEはそれを解釈してくれるので改行されて表示されるわけだ。ただし、文字実体参照にしても数値文字参照にしても、使用しているブラウザや環境によって表示されないものもあるので注意が必要。まあ、Windowsで日本語環境なら、古いブラウザでもASCII文字の記号(アットマークも含む)と英数字ならたぶん問題ないし、HTML 4.0 対応ブラウザなら、それ以外の一般的な記号(例えば©や♥とか)も大丈夫と思う。試したわけじゃないのであまり自信ないけどね(^^;

なんか文字実体参照や数値文字参照の話の方が多くなってしまった。ここら辺、ちょっとややこしいんだけど結構おもしろいんで、興味を持ったならGoogleで「実体参照 HTML」とか「実体参照 文字コード」なんてキーワードで検索してみてください。

対策その3:メールアドレスをタグで分断する

メールアドレスをそのままテキストの一部として書いている場合は、メールアドレスの任意の場所にタグを入れてメールアドレスを分断するという方法もある。例えば、コメントや span で分断する。

メールは、aaaa@bb<!-- ウイルスメールは即削除! -->bb.ne.jp へ。
質問・感想等は、aaa<span title="スパムメールお断り">a@bbbb</span>.ne.jp までお願いします。

一応説明しておくと、<!---->で囲んだ部分がコメントね。もちろん、表示画面上でコピー&ペーストすればちゃんとしたメールアドレスになるので問題ない。ただし、タグで分断するわけだから、mailto:のメールアドレスには使えない。

対策その4:メールアドレスをJavaScriptで表示する

JavaScriptの外部ソースにメールアドレスを書いておき、JavaScriptが有効ではないと表示されないようにする。

まず、外部ソースファイルを作る。新規作成したテキストファイルに次のように書いて、拡張子jsの任意のファイル名に変更する(例では meado.js )。

document.write("メールはこちら".link("mailto:aaaa@bbbb.ne.jp"));

メールアドレスを表示させたいページも書き換える。ページのメールアドレスを表示させたい部分に次のように書く。1行目だけでもいいけど、JavaScriptが無効の場合のために2行目も書いた方がいいでしょう。

<script type="text/javascript" src="meado.js"></script>
<noscript>JavaScriptを有効にするとここにメールアドレスが表示されます</noscript>

書き換えたページと同じ場所に外部ソースファイルをアップロードする。パスがあってりゃ別に違う場所でもいいけど。
で、例えば次のように書くと。

<p>質問・感想等の<script type="text/javascript" src="meado.js"></script>
<noscript>JavaScriptを有効にするとここにメールアドレスが表示されます</noscript>へお願いします。</p>

実際の表示は下のようになる。

質問・感想等のへお願いします。

この方法だと、ページソースには一切メールアドレスを書かないわけだから、そこからメールアドレスを取得される恐れはまったくない。ただし、JavaScript有効ならちゃんと表示されるが、無効だと表示されないという難点もある。その点で、個人的にはあまりおすすめできない。

どの方法がいいのか?

はっきり言って、メールアドレスなぞ公開しないのが一番!マテコラ

というのも、「対策その1:メールアドレスに余計な文字を加える」以外は、メールアドレスを認識するプログラムを改良されたり、jsファイルもメールアドレス収集対象に入れられたり、で、そのうち効果がなくなるかも知れないから。だからって、メールアドレスは一切公開しませんてのも現実的に無理があるよね、特に自分でサイトを運営している人は。

てなわけで、とりあえず、できることはやっておいた方が吉かと思います。どの方法がいいかというと、確実を期すなら「その1:メールアドレスに余計な文字を加える」「その4:メールアドレスをJavaScriptで表示する」も今のところ有効。スマートにやりたいなら「その2:@(アットマーク)を数値文字参照で書く」。この3つのどれか好きなもの、でいいんでないでしょうか。

Copyright (c) 2003-2006 Teal All Rights Reserved.