php 通过修改隐藏电子邮件地址

php obscure email address with modifications

有时我的内容中包含电子邮件地址 - 但我想使用 javascript 来隐藏它们。

我已经为前端制作了一个 javascript 解决方案,可以重建它们,但只能从某种格式开始。

这是我需要 HTML 用于电子邮件地址的格式:

<a email-a="firstbit" email-b="secondbit.com"></a>

Javascript 然后运行一些代码并将 HTML 转换为:

<a href="mailto:firstbit@secondbit.com">[click to email]</a>

这样就没问题了。我的问题是如何让 php 将充满随机内容的 HTML 变量中的所有电子邮件地址从所见即所得的格式转换为不同的格式。如转换此:

bla bla bla firstbit@secondbit.com bla bla bla

对此:

bla bla bla <a email-a="firstbit" email-b="secondbit.com"></a> bla bla bla 

我猜最后是这样的:

function change_emails($html){
// preg replace?
}


// $html is a variable full of HTML contents
$html = change_emails($html);

我已经知道如何更改单个字符串中的电子邮件地址 - 但我不知道如何更改可能包含在大量内容中的所有电子邮件地址。

这使用相当简单的正则表达式(来自 )来检测电子邮件地址并将其替换为您的 HTML-ish 模板。

$pattern = "/([a-zA-Z0-9+._-]+)@([a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/";
$template = '<a email-a="%s" email-b="%s">[click to email]</a>';

$str = "bla bla bla firstbit@secondbit.com bla bla bla";

return preg_replace_callback($pattern, function($matches) use ($template) {
    [, $local, $host] = $matches;
    return sprintf($template, $local, $host);
}, $str);

演示~https://3v4l.org/CsPg3


使用正则表达式正确检测电子邮件地址可能非常复杂,所以如果您需要更全面的东西,请查看此站点 ~ http://emailregex.com/