8

PHPを使用して、ページに印刷されたときにデータベースからの単純なテキストに含まれる電子メールアドレスを自動的にリンクする方法を見つけようとしています。

例、今私は持っています:

Lorem ipsum dolor email@foo.com sit amet

そして、私はそれを(その場で)次のように変換したいと思います:

Lorem ipsum dolor <a href="mailto:email@foo.com">email@foo.com</a> sit amet 
4

4 に答える 4

15

このバージョンを試してください:

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;
}
于 2014-07-16T09:39:10.667 に答える
0

これは、メールと 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(これは、他の正規表現の問題のために代わりに使用することになったものです)

于 2022-02-01T23:40:31.600 に答える