PHP压缩字符串

时间:2012-01-31 19:04:21

标签: php url encoding compression urlencode

我有一个数组转储,我想压缩成一个字符串,可以通过url发送到另一个部分并进行解码。

目前我正在gzcompressing它和base64编码它。但它似乎没有起作用。我在接收端使用它时返回bool(false)

gzcompress(json_encode($images),9))

编码数据的示例

string(214) "{"1":null,"2":null,"3":null,"4":"..\/uploads\/2462df38db374653720daa42b7aefec4\/cv4slm3fr8_c.png","5":"..\/uploads\/2462df38db374653720daa42b7aefec4\/vzh72hwqvk_c.png","6":null,"7":null,"8":null,"9":null,"10":null}"

null值填充了类似的数据。我需要通过网址将这些数据传递给另一个脚本。

注意:打开的url位于模态框内,因此我无法对其进行POST。

3 个答案:

答案 0 :(得分:6)

不要这样做。网址不适用于“大型”字符串。它们的长度限制因每个浏览器而异。当浏览器/服务器以静默方式截断您的URL时,您可能会收到损坏的数据。 URL也不适合任意二进制数据,这就是你最终得到的GZ压缩数据,你必须对其进行url编码,这几乎肯定会使字符串超出原来的范围。

请使用POST请求,该请求具有更大的限制。

答案 1 :(得分:2)

不是通过json对其进行编码,而是尝试将该数组转换为字符串并通过POST

发送
$encoded = base64_encode(serialize($arrayOfData));

将其作为POST请求发送到服务器并在另一侧解码

$decoded = base64_decode(unserialize($receivedData));

答案 2 :(得分:0)

在上面的答案中,大部分事情都被覆盖了。但Marc提到了好点。 传递更大的字符串可能会导致问题.POST是好方法。

但是在某些情况下你不能使用帖子。例如如果你想提供书签功能。

所以要在字符串中传递这种数据使用base64_encode(gzcompress(json_encode($ arr)),9)。这肯定会减少查询字符串中传递的参数的大小。

希望这会有所帮助。