2013-02-14 175 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