PHPを使用して、ページに印刷されたときにデータベースからの単純なテキストに含まれる電子メールアドレスを自動的にリンクする方法を見つけようとしています。
例、今私は持っています:
Lorem ipsum dolor email@foo.com sit amet
そして、私はそれを(その場で)次のように変換したいと思います:
Lorem ipsum dolor <a href="mailto:email@foo.com">email@foo.com</a> sit amet
このバージョンを試してください:
function automail($str){
//Detect and create email
$mail_pattern = "/([A-z0-9_-]+\@[A-z0-9_-]+\.)([A-z0-9\_\-\.]{1,}[A-z])/";
$str = preg_replace($mail_pattern, '<a href="mailto:$1$2">$1$2</a>', $str);
return $str;
}
2015 年 10 月 31 日更新: 次のようなメール アドレスの修正abc.def@xyz.com
function detectEmail($str)
{
//Detect and create email
$mail_pattern = "/([A-z0-9\._-]+\@[A-z0-9_-]+\.)([A-z0-9\_\-\.]{1,}[A-z])/";
$str = preg_replace($mail_pattern, '<a href="mailto:$1$2">$1$2</a>', $str);
return $str;
}
これは、メールと URL に対してこれを行う関数用に (ここの回答から) 結合したコードです。
これの利点は、リンクが既に存在する場合、リンクに変換されないことです。
function replace_links( $content ){
$content = preg_replace('"<a[^>]+>.+?</a>(*SKIP)(*FAIL)|\b(?:https?)://\S+"', '<a href="$0">$0</a>', $content);
$content = preg_replace('"<a[^>]+>.+?</a>(*SKIP)(*FAIL)|\b(\S+@\S+\.\S+)\S+"', '<a href="mailto:$0">$0</a>', $content);
return $content;
}
デモ: https://glot.io/snippets/g6nwd6amyo
また、WordPress がこれをどのように処理するかを確認することをお勧めします。実際のメールの後にピリオドやその他の文字などのランダムな問題がテストされ、処理されていることがわかっているためです。
https://github.com/WordPress/WordPress/blob/master/wp-includes/formatting.php#L2997-L3055
make_clickable
特にコールバック行を見てください_make_email_clickable_cb
(これは、他の正規表現の問題のために代わりに使用することになったものです)