当前位置: 首页 > 面试题库 >

如何在PHP中压缩/解压缩长查询字符串?

谷博艺
2023-03-14
问题内容

我怀疑这是否是加密,但是找不到更好的短语。 我需要像这样传递一个长查询字符串:

html" target="_blank">http://test.com/test.php?key=[some_very_loooooooooooooooooooooooong_query_string]

查询字符串不包含任何敏感信息,因此在这种情况下我并不真正担心安全性。只是…好,太长且太丑陋。是否有一个库函数可以让我将查询字符串编码/加密/压缩为类似于md5()的结果(类似于,总是32个字符串),但是可以解码/解密/解压缩?


问题答案:

基本前提是非常困难的。在URL中传输任何值意味着您只能使用ASCII字符的子集。使用任何形式的压缩gzcompress都会减小字符串的大小,但会导致二进制斑点。但是,该二进制blob无法在URL中传输,因为它将产生无效字符。要使用ASCII子集传输该二进制Blob,您需要以某种方式对其进行编码,然后将其转换为ASCII字符。

因此,您需要将ASCII字符转换为其他字符,然后再转换为ASCII字符。

但是实际上,大多数时候,您开始使用的ASCII字符已经是最佳长度。这里是一个快速测试:

$str = 'Hello I am a very very very very long search string';
echo $str . "\n";
echo base64_encode(gzcompress($str, 9)) . "\n";
echo bin2hex(gzcompress($str, 9)) . "\n";
echo urlencode(gzcompress($str, 9)) . "\n";

Hello I am a very very very very long search string
eNrzSM3JyVfwVEjMVUhUKEstqkQncvLz0hWKUxOLkjMUikuKMvPSAc+AEoI=
78daf348cdc9c957f05448cc554854284b2daa442772f2f3d2158a53138b9233148a4b8a32f3d201cf801282
x%DA%F3H%CD%C9%C9W%F0TH%CCUHT%28K-%AAD%27r%F2%F3%D2%15%8AS%13%8B%923%14%8AK%8A2%F3%D2%01%CF%80%12%82

如您所见,原始字符串最短。在编码的压缩中,base64最短,因为它使用最大的字母表示二进制数据。它仍然比原始的更长。

对于某些非常特殊的字符组合以及一些非常特定的压缩算法(可以将其压缩为ASCII可表示的数据),有可能实现某种压缩,但这是理论上的。 更新:
实际上,这听起来太消极了。问题是您需要弄清楚压缩是否适合您的用例。不同的数据压缩方式不同,不同的编码算法工作方式也不同。同样,较长的琴弦可能会实现更好的压缩率。可以达到某种压缩效果的地方可能是一个不错的地方。您需要确定大部分时间是否处于最佳状态。

md5之类的东西不合适,因为md5是一个 hash ,这意味着它是不可逆的。您无法从中获取原始值。

恐怕您只能通过POST发送该参数,如果该参数在URL中不起作用。



 类似资料:
  • 本文向大家介绍php压缩和解压缩字符串的方法,包括了php压缩和解压缩字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php压缩和解压缩字符串的方法。分享给大家供大家参考。具体如下: 下面php代码通过gzcompress和gzuncompress压缩和解压缩字符串,可以设定压缩级别 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 我在想办法也无法在Java中解压缩String时遇到麻烦。这是我要学习的基本Java类,因此只需要基本命令,没有什么花哨的地方。它能够输入的目标 在命令提示符下,它将打印(就像它压缩参数字符串一样)。 另一个目标是输入 它将打印(就像它将解压缩参数String一样)。减压是我遇到的问题。这是我的代码,非常感谢我得到的任何帮助。 问题答案: Quick Code for you..

  • 问题内容: 我正在使用以下代码来压缩和解压缩字符串数据,但是我面临的问题是,它很容易被压缩而不会出错,但是decompress方法会引发以下错误。 线程“主”中的异常java.io.IOException:不是GZIP格式 仍然不知道如何解决此问题!!! 问题答案: 这是因为 发送您可以从中获得的,并在其中使用它来构建您的。以下是需要在代码中进行的更改。

  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:

  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • 问题内容: 我使用GZIPOutputStream或ZIPOutputStream压缩了一个字符串(我string.length()小于20),但是压缩后的结果比原始字符串长。 在某个站点上,我发现一些朋友说这是因为我的原始字符串太短,GZIPOutputStream可用于压缩较长的字符串。 因此,有人可以帮我压缩字符串吗? 我的功能是这样的: 更新: 问题答案: 压缩算法几乎总是具有某种形式的空