2

特定の文字列を短いバージョンに圧縮しようとしています。改行を含まない貼り付け可能な圧縮文字列をコピーします。

gzcompress を試しましたが、結果をコピーして別の php スクリプトに貼り付け、gzuncompress を試行すると、「警告: gzuncompress(): データ エラー」がスローされます。

文字列を圧縮するネイティブ php 関数はありますか?結果は改行のない文字列になりますか?

ありがとう。

4

3 に答える 3

5

base64_encode / base64_decode を試すことができます。切り取りと貼り付けのためにバイナリに圧縮する場合は、最初に base64 でエンコードすることをお勧めします。

于 2009-11-02T17:35:55.633 に答える
2

圧縮後に改行をエスケープできます。文字列に対して gzcompress() を実行し、圧縮結果で改行を既知の 2 文字のペアに置き換えます。解凍するには、既知の 2 文字のペアを改行に置き換えてから、gzuncompress() を実行します...

実際には、2 回交換する必要があります。私はこれを英語 (私の母国語ではない) で表現できないので、ここに例を示します: '+n' を使用して改行をエスケープします。最初に、単独で立っているすべての「+」をエスケープする必要があります。これは、「n」が後に続くと、圧縮解除時に誤って改行に置き換えられるためです。「+」をエスケープするために「++」を選択しましょう。次に、改行を「+n」に置き換えます。解凍するときは、すべての '+n' ペアを改行に置き換えてから、すべての '++' ペアを '+' に置き換えます。それでおしまい !

于 2009-11-02T17:45:43.563 に答える
1

常に入力よりも短い出力を生成する一般的な圧縮アルゴリズムを設計することは不可能です。そのため、常に入力よりも短絡出力が必要な場合は、アルゴリズムで実行できることを制限し始める必要があります。入力 (長い) 文字列で受け入れられる文字と、出力 (短い) 文字列で受け入れられる文字について考える必要があります。これらについてよく理解したら、どのようなオプションがあるかを考え始めることができます。

于 2009-11-02T22:50:28.910 に答える