W3docs

convert_uudecode()

Функция convert_uudecode() декодирует строку в формате uuencode обратно в исходные двоичные данные. Синтаксис функции:

Функция convert_uudecode() декодирует строку в формате uuencoded обратно в исходные двоичные данные. Она является точной противоположностью convert_uuencode(): всё, что производит convert_uuencode(), функция convert_uudecode() превращает обратно в исходные байты.

На этой странице описаны синтаксис, полный пример с прямым и обратным преобразованием, поведение при работе с файлами, распространённые подводные камни, а также случаи, когда эту функцию стоит использовать вместо современной альтернативы, такой как Base64.

Что такое uuencode?

uuencode (Unix-to-Unix encoding) — старый алгоритм упаковки двоичных данных в печатаемые ASCII-символы, чтобы они могли безопасно передаваться по текстовым каналам, например в теле электронных писем или в текстовых логах. Каждая группа из 3 байтов отображается в 4 печатаемых символа, а первый символ каждой строки хранит длину этой строки.

В PHP вы редко создаёте данные в формате uuencode вручную. Как правило, вы либо получаете их от устаревшей системы, либо самостоятельно создаёте с помощью convert_uuencode() и впоследствии декодируете с помощью convert_uudecode(). Обратите внимание: convert_uudecode() работает с необработанным закодированным телом — она не требует (и не удаляет) классическую обёртку begin 644 ... / end, которую добавляет утилита командной строки uuencode.

Синтаксис

convert_uudecode(string $string): string|false

Функция принимает один параметр, $string — данные в формате uuencode для декодирования — и возвращает декодированные данные. Если входные данные не являются корректными данными uuencode, функция возвращает false.

Базовый пример: прямое и обратное преобразование строки

Наиболее наглядный способ увидеть работу convert_uudecode() — закодировать строку и декодировать её обратно:

<?php
$original = "Hello, World!";

// Encode the data first.
$encoded = convert_uuencode($original);

// Decode it back to the original bytes.
$decoded = convert_uudecode($encoded);

echo $decoded;
?>

Вывод этого кода:

Hello, World!

Декодированное значение побайтово совпадает со строкой, с которой мы начали. Шаблон прямого и обратного преобразования — надёжный способ использования функции: закодируйте с помощью convert_uuencode(), сохраните или передайте закодированный текст, затем декодируйте с помощью convert_uudecode() на другом конце.

Декодирование файла в формате uuencoded

Типичный реальный сценарий — чтение содержимого в формате uuencoded из файла и запись декодированных байтов обратно:

<?php
$encoded = file_get_contents("encoded_file.txt");

if ($encoded === false) {
    die("Could not read the encoded file.\n");
}

$decoded = convert_uudecode($encoded);

if ($decoded === false) {
    die("The file did not contain valid uuencoded data.\n");
}

file_put_contents("decoded_file.txt", $decoded);
echo "Decoded " . strlen($decoded) . " bytes.\n";
?>

Здесь file_get_contents() читает закодированный текст, convert_uudecode() декодирует его, а file_put_contents() сохраняет исходные байты в новый файл. Проверка возвращаемых значений защищает от отсутствующего файла или повреждённых входных данных.

Подводные камни

  • Функция работает в паре с convert_uuencode(), а не с утилитой командной строки uuencode. Данные, созданные самостоятельной утилитой uuencode, содержат заголовок begin 644 name и завершающий блок end. Передача такой обёртки напрямую в convert_uudecode() не вернёт исходные байты — сначала удалите заголовок и завершающий блок, либо перекодируйте тело с помощью convert_uuencode().
  • При неверных входных данных возвращается false. Всегда проверяйте результат перед использованием, особенно если данные поступают из файла или по сети.
  • uuencode — это не шифрование. Алгоритм лишь делает двоичные данные печатаемыми и не обеспечивает никакой защиты. Любой может декодировать такие данные.

Когда использовать (и когда не стоит)

Используйте convert_uudecode(), когда необходимо взаимодействовать с устаревшей системой, которая работает с форматом uuencode. Для нового кода предпочтительнее Base64 (base64_encode() / base64_decode()): это современный стандарт для безопасного встраивания двоичных данных в JSON, data URI и HTTP-заголовки, поддерживаемый повсеместно.

Связанные функции

  • convert_uuencode() — функция кодирования, парная к данной.
  • base-convert() — преобразование чисел между системами счисления.

Практика

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