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

23

您将需要使用正则表达式:

<?php

function emailize($text)
{
    $regex = '/(\S+@\S+\.\S+)/';
    $replace = '<a href="mailto:$1">$1</a>';

    return preg_replace($regex, $replace, $text);
}


echo emailize ("bla bla bla e@mail.com bla bla bla");

?>

在下面的示例文本中使用上述函数:

blalajdudjd user@example.com djjdjd 

会变成如下:

blalalbla <a href="mailto:user@example.com">user@example.com</a> djjdjd
于 2009-03-09T15:41:36.190 回答
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 回答
-2

我想这就是你想要的...

  //store db value into local variable
    $email = "foo@bar.com";
    echo "<a href='mailto:$email'>Email Me!</a>";
于 2009-03-09T15:35:41.757 回答