如何解决Laravel 中的 str::random() 函数对于短 URL 是否可靠?
我正在尝试在我的 Laravel 项目中创建一个简单的 url 缩短器。我只想使用小写和大写字母和数字作为短 url 地址。 (例如:sD7hY6g) Laravel 中“Illuminate\Support\Str”类下的“Str::random()”函数是否有可能返回这些字符以外的任何内容?我可以信任这个函数还是我需要创建自己的自定义函数?
(另外,无论我使用哪个函数,我都会在记录之前检查代码是否已经在数据库中。)
感谢所有提前回答的人。
解决方法
您是否应该相信 Str::random()
始终返回字母数字字符串?是的。
该函数通过编码为 base 64
数字来规范化其输出。代表基数 64 数的 64 个符号是用于填充的 ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqrstuvwxyz0123456789+\
和 =
。
该函数还将 \+=
替换为空(空格),这意味着 Str::random()
的唯一可能输出是在 ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqrstuvwxyz0123456789
中。
Laravel 5+ 的 Illuminate\Support\Str@random
public static function random($length = 16)
{
$string = '';
while (($len = strlen($string)) < $length) {
$size = $length - $len;
$bytes = random_bytes($size);
$string .= substr(str_replace(['/','+','='],'',base64_encode($bytes)),$size);
}
return $string;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。