问题描述
我制作了一个生成随机密码的 PHP 函数。 但是,有时,密码长度与我想要的不同(我将其固定为 10),我不明白为什么? 如果可能的话,我希望密码不要以特殊字符开头。 你能帮我吗?
<?PHP
function get_random_password() {
$digits = range('0','9');
$lowercase = range('a','z');
$uppercase = range('A','Z');
$special = str_split('!@#$%^&*+=-_?.,:;<>(){}[]/|~`\'"');
shuffle($digits);
shuffle($special);
shuffle($lowercase);
shuffle($uppercase);
$array_special = array_rand($special);
$array_digits = array_rand($digits,3);
$array_lowercase = array_rand($lowercase,3);
$array_uppercase = array_rand($uppercase,3);
$password = str_shuffle(
$special[$array_special].
$digits[$array_digits[0]].
$digits[$array_digits[1]].
$digits[$array_digits[2]].
$lowercase[$array_lowercase[0]].
$lowercase[$array_lowercase[1]].
$lowercase[$array_lowercase[2]].
$uppercase[$array_uppercase[0]].
$uppercase[$array_uppercase[1]].
$uppercase[$array_uppercase[2]]
);
if (strlen($password) > 10) {
$password = substr($password,10);
}
return $password;
}
for ($i=0;$i<=30;$i++) {
echo get_random_password()."<br>";
}
?>
解决方法
我多次运行您的代码。它总是返回长度为 10 个字符的密码。
我看到以下问题:
- 您将其打印为 html,因此
<
和>
之类的字符可能会破坏您的 html 代码 - 换行也可能是个问题
解决这个问题:
- 不要在浏览器中打印出来,最好在控制台中测试您的功能。
- 如果你想把它打印成html,那么你必须使用
htmlentities()
(PHP documentation) 函数才能在浏览器中正确显示它。不要不要使用htmlentities()
存储密码,因为这会将密码中的特殊字符替换为 html 实体。