2012-01-31 111 views
1

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

目前我是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传递给另一个脚本。

注意:打开的URL位于模式框内,因此我无法发布到它。

+0

如果你使用gzcompress,你应该对它进行base64编码,然后在将urlencode附加到接收URL之前应用urlencode。然而,问题是'http_build_query'真的太长了吗? – mario 2012-01-31 19:17:41

回答

2

相反编码它通过JSON尝试仅仅是数组转换为字符串,并通过POST发送它的

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

发送,作为POST请求发送到服务器,并在另一侧上进行解码

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

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

改为使用POST请求,它具有更大的限制。

+0

问题在于,此窗口在iframe中的模式框+ _ +中打开。 – Steven 2012-01-31 19:12:16

0

在上面的答案中涵盖了大部分内容。但马克提到了好点。 传递更大的字符串会导致您的问题。POST是好方法。

但在某些情况下,您无法使用帖子。例如如果你想提供书签功能。

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

希望这会有所帮助。