1

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

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;

4

3 回答 3

3
$mail = "verysecretemail@gmail.com";

$mailparts = explode("@", $mail);

$output = substr($mailparts[0],0,rand(2,5)) . str_repeat("*",rand(1,16));
$output .= "@" . $mailparts[1];
于 2012-05-24T08:57:24.253 回答
0

怎么样:

$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
于 2012-05-24T08:58:11.603 回答
0

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

$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适当地调整长度,这样你就可以确保尽可能地隐藏。

于 2012-05-24T09:30:29.800 回答