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);
使用正则表达式正确检测电子邮件地址可能非常复杂,所以如果您需要更全面的东西,请查看此站点 ~ http://emailregex.com/
有时我的内容中包含电子邮件地址 - 但我想使用 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);
我已经知道如何更改单个字符串中的电子邮件地址 - 但我不知道如何更改可能包含在大量内容中的所有电子邮件地址。
这使用相当简单的正则表达式(来自
$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);
使用正则表达式正确检测电子邮件地址可能非常复杂,所以如果您需要更全面的东西,请查看此站点 ~ http://emailregex.com/