这是使用子字符串执行此操作的更易于阅读的方法:
$emails = array(
'verysecretemail@gmail.com',
'example@example.org',
'someotheremail@example.com',
);
function obfuscate_email($email) {
$at_position = strpos($email, '@');
$chop = rand(1, $at_position - 1);
$mask = str_repeat('*', rand(4, 8));
$partial_address = substr($email, 0, $chop);
$domain = substr($email, $at_position);
return $partial_address . $mask . $domain;
}
foreach($emails as $email) {
var_dump(obfuscate_email($email));
}
// Output:
// string(18) "ver*****@gmail.com"
// string(24) "exam********@example.org"
// string(17) "s****@example.com"
可以在http://ideone.com/21HKd找到一个运行示例
如您所见,我已将代码分解为一个函数,以使其更易于使用。该功能将为您提供一个模糊的电子邮件地址:
- 原始地址的随机印章(考虑到它的长度)
- 星号的随机掩码
如果我自己实际实现这个功能,那么我会确保我试图混淆的电子邮件地址的长度超过 3 个字符,并$chop
适当地调整长度,这样你就可以确保尽可能地隐藏。