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()— преобразование чисел между системами счисления.