【问题标题】:Basic javascript compression for GET inputGET 输入的基本 javascript 压缩
【发布时间】:2013-02-11 13:43:08
【问题描述】:

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

【问题讨论】:

  • 你想要完成什么?
  • 所以你不想加密任何东西,而是压缩它?
  • 似乎 OP 只是想缩短 URL。
  • 你对长网址的定义是什么?您是否需要生成 url 客户端,或者是否可以往返服务器?根据您的要求,可能的解决方案可能是在服务器端使用键值存储(建议作为可能的解决方案),另一种可能的解决方案是在客户端使用 javascript 压缩 url(例如 gzip 或类似的,但这取决于什么是一个长 url,如果它会使 url 更短。)另一个解决方案是删除冗余数据
  • 注意本网站网址的变化:finalesfunkeln.com/s3(使用工具时)。我想要这样的东西..也许我应该阅读那个 javascript :\ ..假设它被用来压缩值。

标签: php forms input get


【解决方案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 组合 - 需要填满很多!

有关示例代码,请参阅此introductory article。它使用以 base62 编码的 MD5 哈希作为哈希,使其小于通常的 32 个十六进制字符长度。

编辑:如果您不想使用数据存储,using an actual compression algorithm like LZW in JavaScript 可能会缩短相同参数的长行。

【讨论】:

  • 一个广泛的答案.. 然而,这个解决方案是过度杀戮。无论如何,谢谢!
  • 好的,那么也许你可以使用实际压缩。添加了文章的链接。
【解决方案2】:

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

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

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

但是,当您需要更改任何内容时,这会使一切变得更加复杂,但这取决于您的情况。但这是可能的,而且这是缩短 url:s 长度的一种非常有效的方法。

【讨论】:

  • 不幸的是,这些值不仅仅是布尔值。
  • 它不仅仅适用于布尔值,我只是举了一个例子。这几乎就是finalesfunkeln.com/s3 使用的技术
【解决方案3】:

用途:

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

在JS中并通过内置的base64_decode

在php中解码

【讨论】:

  • base64 编码会使其 longer 而不是 shorter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多