Сжатие строки, конечный результат без разрывов строки?

Я пытаюсь сжать любую данную строку до более короткой версии, скопировать вставляемую сжатую строку, которая не содержит разрывов строк.

Я попробовал gzcompress, но затем скопировал / вставил результат в другой скрипт php и попытался сгенерировать gzuncompress "Предупреждение: gzuncompress(): ошибка данных"

Есть ли какая-либо встроенная функция php, которая сжимает строку, и в результате получается строка без разрывов строки?

Благодарю.

3 ответа

Решение

Вы можете попробовать base64_encode / base64_decode. Если вы сжимаете в двоичный файл для вырезания и вставки, я бы посоветовал вам сначала кодировать его в base64.

Вы можете избежать разрывов строк после сжатия: запустите gzcompress() для вашей строки, замените разрывы строк известной парой из 2 символов в сжатом результате. чтобы разархивировать, замените пару известных символов на разрывы строк, затем запустите gzuncompress()...

на самом деле, вам нужно будет выполнить 2 замены. поскольку я не могу выразить это по-английски (не на своем родном языке), вот пример: используйте '+ n', чтобы избежать переносов строки. сначала вам нужно будет экранировать все "+", стоящие в одиночестве, так как, если за ним следует "n", он будет случайно заменен разрывом строки при распаковке; давайте выберем "++" для экранирования +. затем замените разрывы строк на '+ n'. при распаковке заменяйте каждую пару "+ n" на разрыв строки, а затем каждую пару "++" на "+". вот и все!

Невозможно разработать общий алгоритм сжатия, который всегда производит выходные данные короче, чем входные. Таким образом, если вы всегда хотите, чтобы вывод был более коротким, чем ввод, вы должны начать ограничивать возможности вашего алгоритма. Вам нужно подумать о том, какие символы допустимы во входной (длинной) строке, а какие символы допустимы в вашей выходной (короткой) строке. Как только у вас есть хорошее представление об этом, вы можете начать работать над тем, какие у вас есть варианты.

Другие вопросы по тегам