探索 PHP 字符串压缩,与 node 中 zlib、pako 库压缩、解压缩处理。
- DEFLATE,是一种使用 Lempel-Ziv 压缩算法(LZ77)和哈夫曼编码的压缩格式。详见 RFC 1951;
- ZLIB,是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: deflate。详见 RFC 1950;
- GZIP,也是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: gzip。详见 RFC 1952;
Content-Encoding 中的 deflate,实际上是 ZLIB。ZLIB 和 GZIP 都是 RAW DEFLATE 的不同 Wrapper。
PHP 字符串压缩函数
gzcompress
,对应解压缩函数:gzuncompress
,使用 raw ZLIB
数据格式。
gzdeflate
,对应解压缩函数:gzinflate
,使用 raw DEFLATE
数据格式。
gzencode
,对应解压缩函数:gzdecode
,压缩成 gzip
编码数据。
bzcompress
,对应解压缩函数:bzdecompress
,压缩成 bzip2
编码数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| echo base64_encode(gzdeflate('1234'));
echo gzinflate(base64_decode("MzQyNgEA"));
echo base64_encode(gzdeflate('1234', 6, ZLIB_ENCODING_DEFLATE));
echo gzinflate(base64_decode("eJwzNDI2AQAB+ADL"));
echo base64_encode(gzcompress('1234'));
echo gzuncompress(base64_decode("eJwzNDI2AQAB+ADL"));
echo base64_encode(gzencode('1234'));
echo gzdecode(base64_decode("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA"));
echo base64_encode(bzcompress('1234'));
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const pako = require('pako');
function btoa(str) { return Buffer.from(str).toString('base64'); }
function atob(b64Encoded) { return Buffer.from(b64Encoded, 'base64'); }
var zipResult = btoa(pako.deflate("1234")); console.log(zipResult);
var unzipResult = pako.inflate(atob("eJwzNDI2AQAB+ADL"), { to: 'string' }); console.log(unzipResult);
var zipResult = btoa(pako.gzip("1234")); console.log(zipResult);
var unzipResult = pako.ungzip(atob("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA"), {to: "string"}); console.log(unzipResult);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const zlib = require('zlib');
function btoa(str) { return Buffer.from(str).toString('base64'); }
function atob(b64Encoded) { return Buffer.from(b64Encoded, 'base64'); }
var zipResult = btoa(zlib.deflateSync("1234")); console.log(zipResult);
var unzipResult = zlib.inflateSync(atob("eJwzNDI2AQAB+ADL")).toString(); console.log(unzipResult);
var zipResult = btoa(zlib.gzipSync(Buffer.from("1234"))); console.log(zipResult);
var unzipResult = zlib.gunzipSync(atob("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA")).toString(); console.log(unzipResult);
|
参考