GET输入的基本javascript压缩


Basic javascript compression for GET input

我正在寻找一个简单的解决方案来减少GET输入代码的长度(在我的网站上)。

这些表单是用JavaScript处理的,并且使用一个函数可以简化URL共享。例如:具有不同名称的多个表单输入被转换为一个简单的settings=1,0,0,1,并作为GET放置在URL中——然后这些数据在PHP中被分解/内爆,以使用/重用输入。

但是,考虑到表单的大小,它仍然会变得非常臃肿。我想在JavaScript中压缩相同的数据,然后在PHP中解压缩,从而允许更短的URL用于共享。

想想TinyUrl。我在谷歌上搜索了,但解决方案比我想要的更复杂——这不是试图隐藏数据,只是使其更短

更新:我想要的一个更好的例子是将长GET输入(如:settings=1,1,1,1,1,1,1,1,1,1,1,1,1)转换为settings=s8djh

您可以创建自己的"短URL",如下所示:从参数中创建一个唯一的id(例如md5哈希),并将id参数对存储在数据存储中。

您可以使用数据库、键值存储(如BerkeleyDB)或存储两个值的noSQL数据库或平面文本文件。

如果MD5散列仍然太长,您有两种选择:1)只需使用一个计数器,该计数器对您存储的每个参数字符串进行计数。但是,请注意,每个参数组合都可以通过简单的URL操作来实现。另一种选择是创建一个随机的n个字符的字符串(n至少>=4),看看它是否存在于数据库中。如果它不存在,请使用该字符串作为id。如果它确实存在,请尝试使用nerw字符串2-5次,如果它们都存在,请逐个增加n。随着时间的推移,您将填充4个字符的名称空间,然后填充5个字符的名字空间,等等。6个字符的姓名空间(使用大小写和数字)允许62^6个组合-需要填充很多!

有关一些示例代码,请参阅这篇介绍性文章。它使用以base62编码的MD5哈希作为哈希,使其长度小于通常的32个十六进制字符。

编辑:如果你不想使用数据存储,也许在JavaScript中使用LZW这样的实际压缩算法可以缩短相同参数的长行。

您可以使用某种固定的"方案"从url中删除冗余数据:

设置=1,0,0,1可能变为:v=a&s=9

其中a是方案的版本(如果将来需要更改,并保持旧的url:s有效),s是值。如果1,0,0,1表示布尔值(1/0,真/假),则它们可以分别存储在一个位中。每比特浪费一个字符是不好的。。将它们全部打包在一位中,并以十六进制发送结果:每个字符4位。

然而,当你需要改变任何事情时,这会使一切变得更加复杂,然而,这取决于你的情况。但这是可能的,这是一种非常有效的缩短网址长度的方法。

使用:

http://phpjs.org/functions/base64_encode/

在JS中,并通过内置的base64_decode

在php中解码