2017-06-20 195 views
0

我正試圖結合php-gzdeflatepako。壓縮我使用的字符串:使用php-gzdeflate和pako-js

const compressed = ' <?php echo base64_encode(gzdeflate('Compress me')); ?> ' ; 
// compressed now contains: c87PLShKLS5WyE0FAA== 

但我似乎無法使用pako讀取此字符串。我曾嘗試以下:

var enc = new TextEncoder("utf-8"); 
pako.ungzip(enc.encode(compressed)); 

我得到這個消息發回:未捕獲的不正確頭檢查

有一個簡單的方法使用通用的PHP壓縮和使用PAKO膨脹?

到目前爲止,我已經嘗試添加各種gzdeflate「水平」從一到九,但他們都沒有出現任何區別。在這一點上,我只是猜測。

,我們寧願不安裝任何特殊擴展到PHP如果可能的話

非常感謝你。

回答

0

這似乎(下面)

步驟涉及工作:

服務器側(PHP):

1)gzdeflate using ZLIB_ENCODING_DEFLATE option

2)BASE64_ENCODE

客戶方:(jScript)

1)ATOB

2)pako.ungzip

3)atos function

<script src='//cdnjs.cloudflare.com/ajax/libs/pako/1.0.5/pako_deflate.js' type='text/javascript'></script> 

<script type='text/javascript'> 
const compressedDEFLATE = '<?php echo base64_encode(gzdeflate('Compress me', 6, ZLIB_ENCODING_DEFLATE)); ?>' ; 

function atos(arr) { 
    for (var i=0, l=arr.length, s='', c; c = arr[i++];) 
     s += String.fromCharCode(
      c > 0xdf && c < 0xf0 && i < l-1 
       ? (c & 0xf) << 12 | (arr[i++] & 0x3f) << 6 | arr[i++] & 0x3f 
      : c > 0x7f && i < l 
       ? (c & 0x1f) << 6 | arr[i++] & 0x3f 
      : c 
     ); 
    return s 
} 
    alert (atos(pako.ungzip(atob(compressedDEFLATE) )) ); 
</script>