我使用以下脚本生成临时密码。
在我上课之前,我知道这不是加密安全的,我应该使用类似openssl_random_pseudo_bytes的东西。但我的问题不是关于"安全"。
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!£$%^&*()?';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
我使用连接到gmail SMTP的PHPMailer通过电子邮件将密码发送给用户。我遇到的问题是,当我的老板在另一个国家/地区对此进行演示时,以下字符作为临时 pw 发送:
New Password: Il%KÂUyÂ?F
请注意,重音 A 不在我的可选字符字符串中。这只发生过一次,但根本不应该发生。结果 - 相关的哈希也不匹配,因此临时密码不起作用。我正在使用字段长度为 255 的password_hash($string, PASSWORD_DEFAULT)
。
当然,当他测试该功能时,他在不同的国家/地区这一事实应该与发送的字符没有任何影响,因为它们是从服务器生成的,显然具有静态位置。
$key = generateRandomString();
$msg.="New Password: ".$key."<br><br>";
$mail->Body = $msg;
我自己尝试过,功能运行良好,所以我认为你的问题是关于编码的。
首先,确保您的字符串是 UTF-8 编码的,使用
utf8_encode($key);
您可以使用mb_detect_encoding$msg和$key来检查它以确保。
如果仍有问题,请尝试:
$mail->CharSet = 'UTF-8';
PHPmailer有时编码可能会很痛苦。
希望这对:)有所帮助