2013-02-14 172 views
6

是否存在用於字符串的Javascript壓縮和PHP/Ruby解壓縮庫?我需要它,因爲我需要在緩慢的上傳鏈接上使用Ajax發送非常長的文本字符串到使用PHP/Ruby作爲服務器端語言的Web服務器。JavaScript字符串壓縮和PHP/Ruby解壓縮

var x = $('#sources').html(); 
// a very-very long text 
var xo = x, o = {}; 
if(x.length>512*1024) { 
    x = compress(x); 
    o.c = 1; 
} 
o.x = x; 
$.post('target.php',o,function(res){alert(res==xo)}); 

在服務器側(例如,PHP):

<?php 
    if(isset($_POST['c']) && $_POST['c']=='1') { 
    $x = decompress($_POST['x']); 
    } else { 
    $x = $_POST['x']; 
    } 
    echo $x; 

回答

4

有最常見的壓縮算法,郵編許多JS實現。

例如zip.js

郵編當然也supported in PHP

+0

啊,所以我必須先將它寫入文件,然後解壓縮它? – Kokizzu 2013-02-14 08:09:37

0

假設你把你的文件通過HTTP人類可讀的文本字符串,我建議你讓你的Web服務器通過使用gzip內容編碼發送文件來處理此問題。

例如,如果你使用Apache,您可以啓用mod_deflate

如果由於某種原因,你不能改變你的Web服務器的配置,PHP也有一個內置採用gzip處理你也可以使用。請參閱:ob_gzhandler

編輯:

至於客戶端到服務器,它看起來並不像這樣直接由任何的XmlHttpRequest實現的支持。你也許可以爲Javascript找到一個自定義的gzip壓縮算法,然後設置request-header來表明它是壓縮的。這樣它就會被web服務器透明地解碼,並且你不必在php中做任何特殊的事情。

看到這個頁面:JavaScript implementation of Gzip

+1

您可以將答案從服務器壓縮到客戶端,但是您是否也可以壓縮請求? – 2013-02-14 08:17:46

+0

好點..看起來不像任何XmlHttpRequest實現支持這一點。 – troelskn 2013-02-14 08:27:17

+0

我認爲一個問題是客戶端不知道服務器處理了什麼壓縮方案。這可能需要第一個請求才能問這個問題,因此在javascript中處理可能會很痛苦。 – 2013-02-14 08:29:38