在 PHP 中解码一个 gzip 压缩的字符串

Rem*_*izZ 1 php rest gzip guzzle php-curl

我正在尝试使用 PHP 解码 REST 响应 (YouTrack-API) 的 gzipped 正文。似乎没有任何效果:

  • 从 CURL 自动解码什么都不做
  • 使用 Guzzle 将标头设置为接受编码没有任何作用
  • 简单地将获取的字符串放入 gzdecode() 什么都不做

我尝试过 gzinflate、gzdecode 和它们的一些狂野组合,包括在开始和结束时剥离字节,但没有成功。我绝不是压缩方面的专家,所以我不知道 gzip 压缩的字符串是否可以采用不同的格式,但是任何旧的“在线 gzip 服务”都可以毫无问题地解码字符串

简单示例:此字符串:

H4sIAAAAAAAA//NIzcnJV8jPSVEozy/KSQEARAYhbw8AAAA=
Run Code Online (Sandbox Code Playgroud)

应该输出:

Hello old world
Run Code Online (Sandbox Code Playgroud)

放入我能找到的任何在线转换器,它可以工作,放入任何 PHP 函数:数据错误。PHP 和 gzip 根本不起作用是怎么回事?是否与整个响应被 gzip 或只是内容有关?

Gor*_*don 5

gzip 压缩的字符串是 base64 编码的,因此您需要执行以下操作:

echo gzdecode(base64_decode('H4sIAAAAAAAA//NIzcnJV8jPSVEozy/KSQEARAYhbw8AAAA='));
Run Code Online (Sandbox Code Playgroud)

  • @RemizZ `=` 用作 base 64 编码字符串末尾的填充。如果您看到一个由字母数字字符`+` 和`/` 组成的字符串,并且末尾有一个等号,则可以肯定它是base64 编码的。 (4认同)