JavaScript字符串压缩用于URL哈希参数

9

我想在URL哈希参数中存储大量数据,而不超过URL字符限制。

有没有常规的压缩字符串长度的方法,可以在另一个页面加载时解码?

我看到LZW编码用于类似的解决方案,但特殊字符对此是否有效?


如果您有一个数据库,另一种解决方案是存储未压缩的字符串,为其分配一个ID并在哈希中使用它。然后客户端可以通过AJAX请求检索初始参数。这是额外的往返,但可能是可以接受的。状态是否可共享?如果不是,您甚至可以将其存储在localStorage中。 - plalx
@plalx 谢谢,状态可以在客户端之间共享,但是要求不使用后端存储。 - Curtis
编码算法的问题在于,除非你知道所有可能的组合并且这涉及到静态数据,否则你无法确定你永远不会超出限制。我认为潜在压缩水平还取决于您实际编码的内容。例如,gzip在处理重复片段方面似乎非常出色。 - plalx
你将要传输什么类型的字符串?哪些字符是允许的?平均长度是多少? - georg
3个回答

3
LZW编码在技术上可行;您只需要将LZW编码的二进制转换为URL安全的base64,以避免输出包含特殊字符。 这是一篇关于JavaScript中base64的MDN文章;URL安全变体的base64只需用-替换+,用_替换/。当然,除非您要存储的数据极易压缩,否则通过这种方式减少字符串大小的可能性不大。

2
只是提醒一下:库lz-stringcompressToEncodedURIComponent似乎实现了大致相同的方法。 - ojdo

3
您可以查看旨在压缩短字符串的 smazshoco。大多数压缩方法直到您超过URL长度限制后才开始发挥作用,因此如果您希望获得任何收益,您需要专门的压缩器来处理此情况。然后,您可以使用 Base 64 或使用所有 URI 安全字符的更有效编码来对二进制结果进行编码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接