convert_uuencode()
Функция convert_uuencode() кодирует строку с помощью алгоритма uuencode. Синтаксис и примеры использования.
Функция convert_uuencode() кодирует строку с использованием алгоритма uuencode. Uuencoding преобразует произвольные двоичные данные в печатное ASCII-представление, позволяя безопасно передавать их по каналам, принимающим только обычный текст — исторически это были вложения электронной почты и сообщения Usenet до того, как MIME и Base64 стали стандартом. Эта функция является кодирующей половиной пары; её аналог, convert_uudecode(), выполняет обратное преобразование.
Важно:
convert_uuencode()была устаревшей начиная с PHP 7.4 и удалена в PHP 8.0. Все примеры на этой странице работают только на PHP 7.4 и более старых версиях. В любом новом коде используйтеbase64_encode()/base64_decode()— они не устарели и формируют вывод, безопасный для URL и электронной почты.
Синтаксис
string convert_uuencode ( string $data )| Параметр | Описание |
|---|---|
$data | Строка для кодирования. Обязательный. Может содержать любые байты, включая двоичные данные. |
Возвращаемое значение: uuencoded-форма $data в виде строки. Результат всегда длиннее входных данных — uuencoding увеличивает объём данных примерно на 35%, поскольку упаковывает каждые 3 входных байта в 4 печатных символа и добавляет заголовки длины каждой строки, а также терминатор `/перевод строки.
Кодирование строки
На PHP 7.4 выводится uuencoded-блок:
-2&5L;&\L(%=O<FQD(0``
`Ведущий символ каждой строки данных кодирует количество байт в этой строке, тело содержит закодированные данные, а финальная строка ` обозначает конец потока. Вывод не читается человеком, но содержит только печатные ASCII-символы — именно в этом и состоит смысл.
Цикл туда-обратно: кодирование и декодирование
Поскольку uuencoding является без потерь, передача результата обратно через convert_uudecode() точно возвращает исходные байты:
<?php
$original = "Hello, World!";
$encoded = convert_uuencode($original);
$decoded = convert_uudecode($encoded);
echo $decoded; // Hello, World!
var_dump($decoded === $original); // bool(true)
?>Это типичный шаблон: кодирование на стороне отправителя, декодирование на стороне получателя.
Кодирование файла
Вы можете закодировать содержимое файла, прочитав его с помощью file_get_contents() и записав результат с помощью file_put_contents():
<?php
$data = file_get_contents("file_to_encode.txt");
$encoded = convert_uuencode($data);
file_put_contents("encoded_file.txt", $encoded);
?>Новый файл содержит текстово-безопасную копию оригинала, которую можно встроить в тело сообщения. Получатель запускает convert_uudecode(file_get_contents("encoded_file.txt")) для восстановления байтов.
Когда это может понадобиться?
Реалистично говоря, вы не будете использовать это в новом коде. Uuencode появился раньше современных транспортных кодировок и именно по этой причине был удалён из PHP. convert_uuencode() встречается только при поддержке устаревшего PHP-кода, взаимодействующего со старой системой, которая по-прежнему ожидает uuencoded-данные. Для всего остального:
- Кодирование двоичных данных для URL, cookies, JSON или электронной почты сегодня: используйте
base64_encode()/base64_decode(). - Кодирование текста для HTTP-заголовков или 7-битной транспортировки почты: смотрите
quoted_printable_encode(). - Формирование данных для обмена: используйте
json_encode().
Частые подводные камни
- Удалено в PHP 8. Вызов
convert_uuencode()на PHP 8.0+ вызывает фатальную ошибкуError. Защищайте устаревший код с помощьюif (function_exists('convert_uuencode'))или переходите на Base64. - Не шифрование. Uuencoding только переформатирует данные; любой может их декодировать. Никогда не используйте его для сокрытия секретов.
- Больший объём вывода. Ожидайте увеличение размера примерно на 35%, поэтому это плохой выбор там, где важна пропускная способность или объём хранилища.