我使用以下脚本生成临时密码。
之前我得到了一个讲座,我知道这不是加密安全的,我应该使用像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将密码通过电子邮件发送给用户。我遇到的问题是,当我的老板在另一个国家进行了演示时,以下字符作为临时点发送:
New Password: Il%KÂUyÂ?F
注意重音的A不在我的可选字符串中。这只发生过一次,但根本不应该发生。因此,相关的哈希值也没有匹配,因此临时密码不起作用。我使用字段长度为255的password_hash($string, PASSWORD_DEFAULT)
。
当他测试这个功能时,他在不同国家的事实当然不应该对发送的字符有任何影响,因为它们是从服务器生成的,显然它具有静态位置。
$key = generateRandomString();
$msg.="New Password: ".$key."<br><br>";
$mail->Body = $msg;
答案 0 :(得分:2)
我自己尝试过,功能完美,所以我认为你的问题是关于编码。
首先确保您的字符串使用
进行UTF-8编码utf8_encode($key);
您可以在$ msg和$ key上使用mb_detect_encoding进行检查以确定。
如果您仍有问题,请尝试:
$mail->CharSet = 'UTF-8';
PHPmailer有时会对编码感到痛苦 希望这会有所帮助:)