Сжатие строки, конечный результат без разрывов строк?
-
12-09-2019 - |
Вопрос
Я пытаюсь сжать любую заданную строку до более короткой версии, скопировать сжатую строку с возможностью вставки, которая не содержит разрывов строк.
Я попробовал gzcompress, но затем скопировал/вставил результат в другой PHP-скрипт и при попытке gzuncompress выдает «Предупреждение:gzuncompress():ошибка данных"
Есть ли какая-либо встроенная функция PHP, которая сжимает строку, и результатом является строка без разрывов строк?
Спасибо.
Решение
Вы можете попробовать base64_encode/base64_decode.Если вы сжимаете двоичный файл для вырезания и вставки, я бы посоветовал вам сначала закодировать его в base64.
Другие советы
вы можете избежать разрывов строк после сжатия:запустите gzcompress() для вашей строки, замените разрывы строк известной парой из двух символов в сжатом результате.для распаковки замените известную пару символов из двух символов разрывами строк, затем запустите gzuncompress()...
на самом деле вам нужно будет выполнить 2 замены.поскольку я не могу выразить это на английском (не на моем родном языке), вот пример:используйте «+n», чтобы избежать разрывов строк.сначала вам нужно будет экранировать каждый «+», который стоит отдельно, поскольку, если за ним следует «n», он будет случайно заменен разрывом строки при распаковке;давайте выберем «++» для экранирования «+».затем замените разрывы строк на «+n».при распаковке замените каждую пару «+n» переносом строки, затем каждую пару «++» на «+».вот и все !
Невозможно разработать общий алгоритм сжатия, который всегда выдает выходные данные короче входных.Итак, если вы всегда хотите, чтобы вывод был короче ввода, вам нужно начать ограничивать возможности вашего алгоритма.Вам нужно подумать о том, какие символы допустимы во входной (длинной) строке, а какие символы допустимы в выходной (короткой) строке.Как только у вас появится хорошее представление об этом, вы сможете приступить к обдумыванию возможных вариантов.