将url参数减少为整数或十六进制short

时间:2018-11-17 20:10:59

标签: php url

我需要使我的网址更短。 url提供的参数将所有这些值填充到表单中。

example.com/module-name-par1-par2-par3-par4 ....- par19

我需要这样的东西: example.com/module-name-3456de34567

我尝试了base64_encode ...,但是结果太大。 函数md5,crypt,hash ...对于我的需求来说太复杂了... 不需要加密数据,因为它是我的配置的一部分,只需要更短的url。

重要提示:我不想使用数据库...

编辑#1 :par1,..,par19只是字母或整数,对于某些参数为十六进制颜色,仅此而已,它们实例化了表单中的元素。 参数的最大字符串长度= 10。 有时我只使用par1,... par5

我不想使用 POsT ,以避免页面刷新, 而且我需要将网址发送给与我合作的人...

我所拥有的: example.com/module-name-51-8-3cb371-example-dddcdc-696969-on-a-FFFFFF-3cb371-backend1

我尝试将每个字母,数字更改为Ascii,但并没有减少...

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

如果base64编码仍然太长,那么您无法从其他编码中获得太多收益,因为可以使用不带百分号转义符的URI字符非常有限。而且显然使用百分号转义会使URL变长而不是变短,因此您要避免这些。

但是您可能会缩短未编码数据的长度。您可以执行以下操作:

  • 颜色代码可以表示2 24 (约1600万)不同的颜色。这些颜色全部是否真的是参数值的潜在候选对象?可能不会。例如,您可以通过仅用3个十六进制字符而不是6个十六进制字符编码颜色来放弃某些精度,就像在CSS中一样。那么FFF等于FFFFFF,969是996699。这仍然允许4000种不同的颜色。如果您打算只使用几种不同的颜色,那么以下想法也可以用于它们:
  • 名称和其他单词(例如“ example”,“ on”,“ a”和“ backend1”)不是完全随机的。您可能永远不会将这些参数之一定义为“ xqzIJ4”。可能您在某个参数中可能出现的单词数量有限。列出这些内容的完整列表,并给它们一个连续的数字(1、2,...),然后传递该数字(以十六进制表示)而不是单词。
  • 如果有可能需要指定更大的数字,也将整数参数编码为十六进制
  • 如果可以应用上述内容并为每个参数使用固定数量的字符(带有零的填充十六进制以获取固定长度),则不再需要连字符定界符。只需连接所有这些代码。现在,当需要解释URL时,您将获得每个参数的长度,然后将URL分成这些部分。

在您的情况下,也许并非所有这些方法都可接受,但是即使您可以使用某些方法,也会缩短您的URL。然后,您仍然可以考虑对其应用base64编码,以获取更多收益。