gpt4 book ai didi

php - youtube 如何对他们的 url 进行编码?

转载 作者:可可西里 更新时间:2023-10-31 22:45:47 28 4
gpt4 key购买 nike

快速提问

youtube 如何对他们的 url 进行编码?采取下面

http://www.youtube.com/watch?v=MhWyAL2hKlk

他们正在做什么来获得值 MhWyAL2hKlk

他们是否使用某种加密然后在他们最后解密

我想要一个与我正在处理的网站类似的东西,下面看起来很糟糕。

http://localhost:8888/example/account_player/?playlist=drum+and+bass+music

我想对 url 进行编码,使其表现得像 youtube 不知道他们是怎么做到的一样。

任何建议

最佳答案

嗯,从技术上讲,YouTube 使用一种算法生成视频 ID。老实说,我不知道。它可以是整个视频文件的哈希和 + 使用当前 UNIX 时间的盐,也可以是视频独有内容的 base64 编码。但我知道这很可能不是随机的,因为如果是的话,碰撞的风险就太高了。

不过,为了举例,我们假设 YouTube 会生成随机 ID。请记住,当使用随机生成的值存储某些内容时,通常最好实现碰撞检查以确保新对象不会覆盖现有对象。但在实践中,我建议使用哈希算法,因为它们是单向的并且在防止冲突方面非常有效。

所以,我对PHP不是很熟悉。我必须先用 JavaScript 写它。然后,我将它移植到 PHP,事实证明这相对简单:

function randch($charset){
return $charset[rand() % strlen($charset)];
}

function randstr($len, $charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-"){
$out = [];

for($i = 0; $i < $len; $i++){
array_push($out, randch($charset));
}
return join("", $out);
}

它的作用是通过给定的 charset 生成一个长度为 len 个字符的随机字符串。

这是一些示例输出:

randstr(5)              -> 1EWHd
randstr(30) -> atcUVgfhAmM5bXz-3jgyRoaVnnY2jD
randstr(30, "asdfASDF") -> aFSdSAfsfSdAsSSddFFSSsdasDDaDa

虽然使用这么短的字符集不是一个好主意。

randstr(30, "asdf")

sdadfaafsdsdfsaffsddaaafdddfad
adaaaaaafdfaadsadsdafdsfdfsadd
dfaffafaaddfdddadasaaafsfssssf

randstr(30)

r5BbvJ45HEN6dWtNZc5ZvHGLCg4Qyq
50vKb1rh66WWf9RLZQY2QrMucoNicl
Mklh3zjuRqDOnVYeEY3B0V3Moia9Dn

现在假设您已经告诉页面使用此函数为刚刚上传的视频生成一个随机 ID,现在您想将此 key 存储在一个表中,并带有相关数据的链接以显示正确的页面.如果通过 $_GET(例如 /watch?v=02R0-1PWdEf)请求 ID,您可以告诉页面根据包含视频 ID 的数据库检查此 key ,如果找到匹配项,则从该键中获取数据,否则给出 404。

如果您不希望它是随机的,您也可以直接编码为 base 64 字符串。这可以通过 base64_encode()base64_decode() 来完成。例如,假设您出于某种原因将视频数据放在一个字符串 $str="filename=apples.avi;owner=coolpixlol124" 中。 base64_encode($str) 将为您提供 ZmlsZW5hbWU9YXBwbGVzLmF2aTtvd25lcj1jb29scGl4bG9sMTI0

稍后使用 base64_decode($new_str) 对其进行解码,这将返回原始字符串。

不过,正如我之前所说,使用像 SHA 这样的散列算法可能是更好的主意。

希望对您有所帮助。

编辑:我忘记说了,YouTube 的视频 ID 目前是 11 个字符长,所以如果你想使用同样的东西,你会想要使用 randstr(11) 来生成一个 11 位随机字符串,就像我得到的这个样本 ID:6AMx8N5r6cg

编辑 2 (2015.12.17):完全重写了答案。原版是废话,我写的时候都不知道自己在想什么。

关于php - youtube 如何对他们的 url 进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com