1

我正在寻找一种简单的解决方案来减少我的 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,1settings=s8djh.

4

3 回答 3

1

您可以像这样创建自己的“短 URL”:从参数(例如 md5 哈希)创建唯一 id,并将 id-参数对存储在数据存储中。

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

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

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

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

于 2013-02-11T13:47:23.843 回答
0

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

settings=1,0,0,1 可能变成:v=a&s=9

where a is the version of your scheme (if you need to change it in the future, and keep old url:s valid) and s are the values. If 1,0,0,1 represents booleans (1/0, true/false) then they can be stored in a single bit each. Wasting one character per bit is bad.. Pack them all in one bit, and send the result in hex: 4 bits per character.

This, however, makes everything more complicated when you need to change anything, this, however, depends on your scenario. But it's possible, and it's a really effective way of shortening the length of your url:s.

于 2013-02-11T14:32:41.563 回答
-3

采用:

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

在 JS 中并通过内置的base64_decode在 php 中对其进行解码

于 2013-02-11T13:49:09.077 回答