+
改为-
,将/
改为_
。据我所知,URL的最佳编码方式是使用“base66”编码,并采用以下字母表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789-_.~
https://example.org/articles/.3Ja~jkWe
问题是,您是否希望在URL中使用 .
和 ~
?
在一些旧服务器上(现在已经很古老了,我猜), ~ joe
将意味着此服务器上用户 joe
的“www目录”。因此,用户可能会对 ~
字符在URL中间的作用感到困惑。这在学术网站上很常见,尤其是计算机科学教授的网站(例如Donald Knuth的网站https://www-cs-faculty.stanford.edu/~knuth/)。
然而,在我的测试中,以下14个其他符号也不会被百分比编码(在Chrome 95和Firefox 93中):
!$'()*+,:;=@[]
(另请参见此StackOverflow答案)
这样可以留下“base80” URL编码的可能性。其中一些字符(特别是+
和=
)在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最初会对'
和~]
进行百分比编码,但在后续请求中则不会。
你可以使用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/