在PHP中压缩字符串的最佳方法

时间:2012-06-12 05:36:11

标签: php string compression

我用gzcompress压缩数组(json_encode($ arr),9)。 所以我使用json_encode将数组转换为字符串,然后使用gzcompress进行压缩。 但我发现结果字符串的大小差别不大。 在压缩大小为488 KB之前,压缩大小为442 KB之后。

有什么方法可以进一步压缩字符串吗?

提前致谢。

2 个答案:

答案 0 :(得分:16)

我不确定你的数字是否正确,你可以使用gzdeflate而不是gzcompress,因为gzcompress会在输出中添加6个字节,在开头添加2个额外字节,在结尾添加4个额外字节。

一个简单的测试显示一个1756800 len字符串通过双重压缩压缩到99bytes,如果压缩一次则压缩为5164bytes。

<?php 
$string = str_repeat('1234567890'.implode('', range('a', 'z')), 48800);

echo strlen($string); //1756800 bytes

$compressed = gzdeflate($string,  9);
$compressed = gzdeflate($compressed, 9);

echo '<br/>'.strlen($compressed).'<br/>';//99 bytes

echo gzinflate(gzinflate($compressed));
?>

答案 1 :(得分:14)

字符串的压缩程度取决于您要压缩的数据。如果它主要由随机数据组成,那么你将无法在尺寸方面取得如此大的进步。有许多算法专为特定用途而设计。

您应该尝试确定要压缩的数据主要包含哪些内容,然后选择适当的压缩。

刚才我只能推荐你bzcompress,bzip的压缩率通常比gzip高。