从静态文本自动创建电子邮件链接
Posted
技术标签:
【中文标题】从静态文本自动创建电子邮件链接【英文标题】:Automatically create email link from a static text 【发布时间】:2010-10-12 05:15:37 【问题描述】:我试图弄清楚如何使用 php 在页面中打印时自动链接数据库中包含在简单文本中的电子邮件地址。
例如,现在我有:
Lorem ipsum dolor email@foo.com sit amet
我想(即时)将其转换为:
Lorem ipsum dolor <a href="mailto:email@foo.com">email@foo.com</a> sit amet
【问题讨论】:
您的转换前与您的转换后完全相同。请多解释一下你需要什么。 【参考方案1】:你需要使用正则表达式:
<?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
【讨论】:
谢谢,我试过了,但是好像不行。我已经通过“$text”传递了文本并放了一个“echo $result;”在 之后,但没有任何结果。也许我犯了一个愚蠢的错误,我刚刚开始学习php。 是的,我测试过,一开始没有用。我刚刚重新测试了它。现在它就像一个魅力。如果您想查看正则表达式的输出,只需注释掉 preg_replace / return 部分。否则不会显示 preg_match/var_dump ;-) 不太正常,我的电子邮件链接如下所示:test@ email.com 优秀 - 效果很好。如果将代码重新应用于输出字符串,您将如何防止它再次被编码。就我而言,我想在将其保存到数据库之前通过一些 html 运行此代码,但是从数据库中获取的代码可能已经具有 mailto: 链接的电子邮件地址。我最终得到:Bob Brown <a <a href="mailto:href="mailto:bob@turboweb.co.nz">bob@turboweb.co.nz</a>">href="mailto:bob@turboweb.co.nz">bob@turboweb.co.nz</a></a>
它不适用于email@email.com.
这个正则表达式效果更好:'/([a-zA-Z0-9_\-\.]*@\S+\.\w+)/'
【参考方案2】:
试试这个版本:
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;
【讨论】:
这应该被投票,而不是标记为正确的答案,这会更好。 不适用于电子邮件地址 ala john.does@example.com @NotthingCtrl ,这会忽略已链接的电子邮件吗? @OguguaBelonwu 不,它也会匹配它们。也会喜欢http://example.com/email/hello@example.com/
,需要一些调整。
可以确认这个效果更好 --- 接受的答案有效,但它包括标点符号等内容,如果它出现在电子邮件之后。例如:“向 myemail@email.com 发送电子邮件,或致电”生成匹配为 myemail@email.com,
。这解决了这个问题【参考方案3】:
我想这就是你想要的......
//store db value into local variable
$email = "foo@bar.com";
echo "<a href='mailto:$email'>Email Me!</a>";
【讨论】:
不,他可能需要正则表达式来查找和替换文本中的任何电子邮件。 没错,将文本中包含的电子邮件地址转换为“mailto”链接,周围文本保持不变以上是关于从静态文本自动创建电子邮件链接的主要内容,如果未能解决你的问题,请参考以下文章