convert_uudecode()
Die Funktion convert_uudecode() dekodiert einen uuencodierten string zurück in die ursprünglichen Binärdaten. Syntax und Beispiele.
Die Funktion convert_uudecode() dekodiert einen uuencodierten string zurück in die ursprünglichen Binärdaten. Sie ist das genaue Gegenteil von convert_uuencode(): Was convert_uuencode() erzeugt, wandelt convert_uudecode() wieder in die ursprünglichen Bytes zurück.
Diese Seite behandelt die Syntax, ein vollständiges Round-Trip-Beispiel, das Verhalten bei Dateien, häufige Fallstricke und wann man diese Funktion statt einer modernen Alternative wie Base64 verwenden sollte.
Was ist uuencode?
uuencode (Unix-to-Unix Encoding) ist ein altes Verfahren zum Verpacken von Binärdaten in druckbare ASCII-Zeichen, damit sie sicher über rein textbasierte Kanäle wie E-Mail-Bodies oder Nur-Text-Logs übertragen werden können. Je drei Bytes werden auf vier druckbare Zeichen abgebildet, und das erste Zeichen jeder Zeile speichert die Länge dieser Zeile.
In PHP werden uuencodierte Daten selten manuell erzeugt. Entweder empfängt man sie von einem Altsystem, oder man erstellt sie selbst mit convert_uuencode() und dekodiert sie später mit convert_uudecode(). Zu beachten ist, dass convert_uudecode() mit dem rohen kodierten Body arbeitet — es erfordert (oder entfernt) nicht den klassischen begin 644 ... / end-Wrapper, den das Kommandozeilenwerkzeug uuencode hinzufügt.
Syntax
convert_uudecode(string $string): string|falseDie Funktion nimmt einen Parameter entgegen, $string — die zu dekodierenden uuencodierten Daten — und gibt die dekodierten Daten zurück. Bei ungültigen uuencodierten Eingabedaten gibt sie false zurück.
Grundlegendes Beispiel: Round-Trip eines Strings
Am deutlichsten lässt sich convert_uudecode() verstehen, wenn man einen string kodiert und ihn wieder dekodiert:
<?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;
?>Die Ausgabe dieses Codes lautet:
Hello, World!Der dekodierte Wert ist byte-genau identisch mit dem string, mit dem wir begonnen haben. Dieses Round-Trip-Muster ist die zuverlässige Verwendungsweise der Funktion: mit convert_uuencode() kodieren, den kodierten Text speichern oder übertragen, und am anderen Ende mit convert_uudecode() dekodieren.
Dekodierung einer uuencodierten Datei
Ein häufiger Praxisfall ist das Lesen uuencodierter Inhalte aus einer Datei und das Zurückschreiben der dekodierten Bytes:
<?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";
?>Hier liest file_get_contents() den kodierten Text, convert_uudecode() dekodiert ihn, und file_put_contents() speichert die ursprünglichen Bytes in eine neue Datei. Die Überprüfung der Rückgabewerte schützt vor einer fehlenden Datei oder beschädigten Eingabe.
Fallstricke
- Sie gehört zu
convert_uuencode(), nicht zum Shell-Befehluuencode. Daten, die mit dem eigenständigen Befehluuencodeerzeugt werden, enthalten einenbegin 644 name-Header und einenend-Footer. Diesen Wrapper direkt anconvert_uudecode()zu übergeben, liefert nicht die ursprünglichen Bytes zurück — der Header/Footer muss zuerst entfernt werden, oder der Body muss mitconvert_uuencode()neu kodiert werden. - Ungültige Eingabe gibt
falsezurück. Das Ergebnis sollte immer geprüft werden, bevor es verwendet wird, insbesondere wenn die Daten aus einer Datei oder dem Netzwerk stammen. - uuencode ist keine Verschlüsselung. Es macht Binärdaten lediglich druckbar und bietet keinerlei Sicherheit. Jeder kann die Daten dekodieren.
Wann man es verwenden sollte (und wann nicht)
convert_uudecode() sollte verwendet werden, wenn die Interoperabilität mit einem Altsystem erforderlich ist, das bereits uuencode nutzt. Für neuen Code ist Base64 (base64_encode() / base64_decode()) vorzuziehen: Es ist der moderne Standard für die sichere Einbettung von Binärdaten in JSON, Daten-URIs und HTTP-Header und wird überall unterstützt.
Verwandte Funktionen
convert_uuencode()— das Kodier-Gegenstück zu dieser Funktion.base-convert()— Zahlen zwischen numerischen Basen umwandeln.