-1

有时我的内容中包含电子邮件地址 - 但我想使用 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 变量从 WYSIWYG 转换为不同的格式。就像在转换这个:

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);

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

4

1 回答 1

1

这使用了一个相当简单的正则表达式(来自这个答案)来检测电子邮件地址并将它们替换为您的 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/

于 2021-03-02T01:50:19.367 回答