【问题标题】:How can I compress JSON and uncompress on PHP?如何在 PHP 上压缩 JSON 和解压缩?
【发布时间】:2019-12-06 18:38:02
【问题描述】:

顺便说一句,这不是重复的,我不是在尝试在 PHP 中压缩,而是在尝试压缩客户端并在 PHP 中解压缩。

我正在尝试将包含 5 个 base64 图像和一些文本的 JSON 数组压缩到我的 PHP api。

我尝试了 lz-string 和 pako,它似乎按预期发送了压缩的有效负载,但我在 PHP 后端解压缩时遇到了问题。

Typescript Gzip。

  var payload = pako.gzip(JSON.stringify(data), { to: 'string' });

  let headers = new Headers({ "Content-Encoding" : "gzip"});
  headers.append('Content-Type', 'application/json; charset=x-user-defined-binary');
  let requestOptions = new RequestOptions({ headers: headers });

  var url = this.baseUrl + "/app/notice/issue/compressed";
  return this.http.post(url, data, requestOptions).pipe(timeout(100000), map(res => { return res.json() }), catchError(err => { return throwError(err.message); }));

PHP

$input = file_get_contents("php://input");
$test = gzdecode($input);
echo $test;

输出

"

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  gzdecode(): data error</p>


</div>"

如果有人可以帮助减少我的 JSON 的大小,那将非常有帮助。

谢谢。

【问题讨论】:

标签: javascript php json typescript compression


【解决方案1】:

您的 PHP 示例看起来不错,应该可以工作。

我不确定 Typescript 部分:二进制字符串可以在被浏览器或http.post() 方法发送之前进行额外编码(可能是 UTF-8?)。

检查发送Content-Length的请求和压缩后二进制字符串的实际长度。它们显然必须相同。

我建议删除pako.gzip() 方法中的{to: 'string'} 选项以获取Uint8Array 而不是字符串,并使用XMLHttpRequest 而不是http.post()

另见:

【讨论】:

  • 哦,是的,抱歉,问题中有错字,但是是的,它正在发送。检查器标题中显示了许多奇怪的字符。
  • 好的,我改了答案,你可以编辑问题来修正错字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多