W3docs

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— editable, runs on the server

На 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%, поэтому это плохой выбор там, где важна пропускная способность или объём хранилища.

Практика

Практика
Что делает функция convert_uuencode() в PHP?
Что делает функция convert_uuencode() в PHP?
Was this page helpful?