2012-01-31 104 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)。這肯定會減少查詢字符串中傳遞的參數的大小。

希望這會有所幫助。