5

我正在寻找一种在空间方面最有效的 url 编码方法。原始二进制文件(base2)可以用 base16 表示,它更小并且是 url 安全的,但 base64 甚至更有效。但是,通常的 base64 编码不是 url 安全的......

那么对于 URLS 也安全的最小编码方法是什么?

4

3 回答 3

3

这就是Base64 URL 编码变体的用途。

它使用相同的标准 Base64 字母,除了+更改为-/更改为_.

大多数现代 Base64 实现将支持这种替代编码。如果你没有,通常只是在解码之前对 Base64 输入进行搜索/替换,或者在将其发送到浏览器之前对输出进行搜索/替换。

于 2016-08-28T14:00:24.407 回答
1

您可以使用 62 个字符表示而不是通常的基数 64。这将为您提供类似于 youtube 的 URL: http ://www.youtube.com/watch?v=0JD55e5h5JM

如果您需要将字符串映射到数据库数字 ID,可以使用此页面中提供的 PHP 函数:

http://bsd-noobz.com/blog/how-to-create-url-shortening-service-using-simple-php

如果您需要将数字 ID 直接转换为短 URL 字符串,或者这个:http: //kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/

于 2012-04-11T18:23:42.480 回答
0

“base66”(理论上,根据规范)

据我所知,URL 的最佳编码是将“base66”编码为以下字母表:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789-_.~

根据 URI 规范 RFC 3986(第 2.3 节),这些都是“未保留字符”,因此它们将按原样出现在 URL 中。使用这种“base66”编码可以给出如下 URL:

https://example.org/articles/.3Ja~jkWe

那么问题是你是否想要在你.~URL 中?

在一些较旧的服务器上(我猜现在很古老)~joe意味着joe该服务器上用户的“www目录”。因此,用户可能会对~角色在您的 URL 中间所做的事情感到困惑。这对于学术网站很常见,尤其是 CS 教授(例如 Donald Knuth 的网站https://www-cs-faculty.stanford.edu/~knuth/

“base80”(在实践中,但未经实战测试)

但是,在我自己的测试中,以下 14 个其他符号也没有进行百分比编码(在 Chrome 95 和 Firefox 93 中):

!$'()*+,:;=@[]

(另请参阅此 StackOverflow 答案

留下可能的“base80” URL 编码。其中一些(特别是+and =)在 URL 的查询字符串部分中不起作用,仅在路径部分中起作用。总而言之,这最终会为您提供漂亮的超压缩 URL,例如:

https://example.org/articles/1OWG,HmpkySCbBy@RG6_,
https://example.org/articles/21Cq-b6Ud)txMEW$,hc4K
https://example.org/articles/:3Tx**U9X' d;tl~rR]q+

您可能不希望 URL 中包含所有这些符号的原因有很多。一个例子是 StackOverflow 自己的“链接器”不会在它生成的链接中包含结束逗号(我已经手动将其作为链接的一部分)。

百分比编码似乎也很挑剔。在某些情况下,Firefox 最初会进行百分比编码'~]但在以后的请求中不会。

于 2021-11-06T00:57:06.600 回答