【问题标题】:PHP email output change [closed]PHP电子邮件输出更改[关闭]
【发布时间】:2012-05-24 08:52:04
【问题描述】:

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

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;

【问题讨论】:

  • 我试过这样的东西 $output = substr_replace($val, '********', 2, 7);其中 $val = $email;
  • 如果您试图保护电子邮件地址不被机器人窃取,有很多更好的方法。
  • 请记住,由于您使用的是随机...请谨慎使用..

标签: php email hide


【解决方案1】:
$mail = "verysecretemail@gmail.com";

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

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

【讨论】:

  • 我喜欢变量所以每个人都在变化:)
  • 如果你指的是第一行,那只是设置一个初始值。将第一行更改为您检索电子邮件的方式,例如$mail = $user->email;.
  • 所以这会替换@字符之前的字符?我认为这就是我所需要的..
【解决方案2】:

比如:

$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

【讨论】:

  • 这总是留下三个字符并添加三个星号。它甚至会删除“@gm”,您需要减去三个初始字符:$address = str_replace(substr($address, 3, strpos($address, "@")-3), "***");
  • 我已对其进行了编辑,以使“@”保持不变并使其更具动态性,但我确信我的新逻辑应该可以工作。无论如何,你有最好的解决方案。
【解决方案3】:

这是一个使用子字符串的更易于阅读的方法:

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

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多