PHP 电子邮件输出更改


PHP email output change

我正在寻找一些脚本的帮助,该脚本使变量的电子邮件输出部分隐藏在@之前,就像我有电子邮件一样

verysecretemail@gmail.com

我需要在输出中"随机"将星星放在那里,例如:

ver***@gmail.com
verys*********************@gmail.com
ve*@gmail.com

但不像:

ver***mail.com
verysecre****ail.com

只是随机使用星星(或者可能是静态的),它不会在@字符之前

我尝试过这样的事情

$output = substr_replace($val, '********', 2, 7);

其中$val = $email;

$mail = "verysecretemail@gmail.com";
$mailparts = explode("@", $mail);
$output = substr($mailparts[0],0,rand(2,5)) . str_repeat("*",rand(1,16));
$output .= "@" . $mailparts[1];

像这样的事情怎么样:

$asterisks = "";
for($i = 0; $i < strlen(substr($address, 0, strpos($address, "@"))); $i++)
    $asterisks = $asterisks . "*"; //This loop sets the required number of asterisks
$address = str_replace(substr($address, 0, strpos($address, "@") - 1), $asterisks); 
//everything before the '@' is replaced by an asterisk

以下是使用子字符串执行此操作的更易于阅读的方法:

$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长度,以便您可以确保尽可能多地隐藏。