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 に答える