【PHP】メールアドレスとテキストからmailtoのリンクを生成する。

ユニークな関数を見つけたのでメモ。

function encode_email($email, $linkText, $attrs = '')  
{  
    // remplazar aroba y puntos  
    $email = str_replace('@', '@', $email);  
    $email = str_replace('.', '.', $email);  
  
    $linkText = str_replace('@', '@', $linkText);  
    $linkText = str_replace('.', '.', $linkText);  
      
    $part1 = '<a href="ma';  
    $part2 = 'ilto&#58;';  
    $part3 = '" '. $attrs .' >';  
    $part4 = '</a>';  
  
    $encoded = '<script type="text/javascript">';  
    $encoded .= "document.write('$part1');";  
    $encoded .= "document.write('$part2');";  
    $encoded .= "document.write('$email');";
    $encoded .= "document.write('$part3');";  
    $encoded .= "document.write('$linkText');";
    $encoded .= "document.write('$part4');";  
    $encoded .= '</script>';  
  
    return $encoded;  
}  

下記のように使う。

$email = 'test@example.com';
$link = 'メールはこちら。';
$attrs = 'class = "test"';
echo encode_email($email, $link, $attrs);

すると下記HTMLが生成される。

<script type="text/javascript">document.write('<a href="ma');document.write('ilto&#58;');document.write('test&#64;example&#46;com');document.write('" class = "test" >');document.write('メールはこちら。');document.write('</a>');</script>

結果下記コードがブラウザに出力される。

<a href="mailto:test@example.com" class="test">メールはこちら。</a>

面白いね。