Можно ли сжать строку с помощью PHP? - PullRequest
0 голосов
/ 11 февраля 2011

Недостатком является то, что выход должен быть закодирован как UTF8 или ISO-8859-1.

Я пытался использовать base64_encode(gzdeflate($string, 9)), но в результате получается больше, чем исходная строка.

Кто-нибудь может придумать, как это сделать?

Спасибо

Ответы [ 3 ]

3 голосов
/ 11 февраля 2011

Сжатые данные в основном двоичные - у них нет набора символов, это просто последовательность байтов. base64 в основном увеличивает размер ввода примерно в 1,33 раза, поэтому, если строка не будет сжата до размера меньше чем .66 или около того исходного размера, вы потеряете.

Большой вопрос: зачем вам нужно перекодировать сжатые данные? Будет ли он отображаться как «простой текст» вместо случайного «мусора», как если бы вы выводили необработанные байты?

1 голос
/ 11 февраля 2011

кодировка base64 добавляет накладных расходов, потому что вы конвертируете двоичный текст в обычный текст.Если ваша строка короткая, эти издержки будут больше, чем усиление сжатия.Однако этот метод должен прекрасно работать на больших строках.

0 голосов
/ 11 февраля 2011

Хорошо, кодировка base64, очевидно, уничтожит все ваши сбережения, поскольку она увеличивает размер как минимум на 8/6 (немного больше в правильной реализации)

Если под ISO-8859-1 вы имеете в виду кодировкуопределенный IANA, вы можете кодировать двоичные данные с ним, поскольку все 255 значений определены (хотя они будут содержать контрольные символы).ISO 8859-1 (обратите внимание на отсутствующий дефис), с другой стороны, не определяет все 255 значений, и о UTF-8 также не может быть и речи.

Если экономия пространства составляет более ~ 14%, вы могли быиспользуйте 7-битную / 8-битную кодировку и просто оставьте MSB 0 (это будет прекрасно работать для UTF8, но все же управляющие последовательности)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...