mailto.php
<?php require_once("Smarty/libs/Smarty.class.php"); $o_smarty = new Smarty(); $o_smarty->template_dir = "."; $o_smarty->compile_dir = "."; $o_smarty->config_dir = "."; $o_smarty->assign('email', 'someone@mailaddres.ne.jp'); $o_smarty->display("mailto.tpl"); ?>
mailto.tpl
{mailto address=$email encode="hex"}
で、これが表示されたページのソースをブラウザ越しに見たもの (適当に改行した)
<a href="mailto:%73%6f%6d%65%6f%6e%65@%6d%61%69%6c%61%64%64%72%65%73.%6e%65.%6a%70"
>someone@mai
laddres.ne.jp</a>
出力結果をみると納得、って感じ。確かに hex エンコードされてる。
本当にエンコードされているか疑わしい人は、上記文字列を切り取り、適当なファイルに貼り付けてブラウザで表示してみるとよいでしょう。
が、ページがコンパイルされて生成される場合は、生成されたページに対して、毎回この変更を手動で行うのは面倒です。
という訳で、スクリプトで処理させます。方針としては、スクリプト処理が必要なファイルにのみ処理を行う、という感じです。まず、メールアドレスが存在するかもしれないファイルの検索には、以下のようなスクリプトを用いました。
find | xargs grep "your@mailaddress"
で、コンパイル前ファイルが以下のようなものとすると、
\author Satofumi KAMIMURA <someone@mailaddress.ac.jp>
コンパイルしたものは以下のようになりました。
<dl compact><dt><b>Author:</b></dt><dd>Satofumi KAMIMURA
<<a href="mailto:someone@mailaddress.ac.jp">someone@mailaddress.ac.jp</a>> </dd></dl>
従って、決め打ちのスクリプトで処理すればよいでしょう。
と、言うわけで、html ページのコンパイル後に以下の処理を行うように Makefile を変更しました。sed, Makefile を使うので、処理文字列の &, # の前に \ を付加してあります。(多分、他人が私にこんな汚いコードを見せてきたら、お説教ものです)
MAIL_INCLUDED_FILE = `find | xargs grep -l "your@mailaddress"` としてもよいでしょう。(ただ、このスクリプトはオリジナルファイルに対して変更を行うので、人が判断したファイル以外を対象にしない方が無難です)
MAIL_INCLUDED_FILE = index.php beego.php REPLACE_FROM = "mailto:someone@mailaddress.ac.jp">someone@mailaddress.ac.jp REPLACE_TO = "\&\#109;\&\#97;\&\#105;\&\#108;\&\#116;\&\#111;\&\#58;%73%6f%6d%65%6f%6e%65@%6d%61%69%6c%61%64%64%72%65%73.%6e%65.%6a%70"(以下略) mail : for i in ${MAIL_INCLUDED_FILE} ; \ do \ cat $$i | sed -e '/${REPLACE_FROM}/s//${REPLACE_TO}/' > /tmp/tmp.php; \ mv /tmp/tmp.php $$i; \ done
以上