convert_uudecode()
La funzione convert_uudecode() decodifica una string uuencoded. Sintassi, esempi pratici e confronto con Base64.
La funzione convert_uudecode() decodifica una string uuencoded riportandola ai dati binari originali. È l'inverso esatto di convert_uuencode(): tutto ciò che convert_uuencode() produce, convert_uudecode() lo riconverte nei byte di partenza.
Questa pagina tratta la sintassi, un esempio completo di andata e ritorno, il comportamento con i file, le insidie più comuni e quando conviene usarla al posto di un'alternativa moderna come Base64.
Cos'è uuencode?
uuencode (Unix-to-Unix encoding) è un vecchio schema per comprimere dati binari in caratteri ASCII stampabili, così da poter transitare in sicurezza attraverso canali solo testuali come corpi email o log in testo semplice. Ogni gruppo di 3 byte viene mappato in 4 caratteri stampabili, e il primo carattere di ogni riga memorizza la lunghezza di quella riga.
In PHP raramente si producono dati uuencoded a mano. Di solito li si riceve da un sistema legacy, oppure li si crea con convert_uuencode() per decodificarli in seguito con convert_uudecode(). Si noti che convert_uudecode() lavora sul corpo codificato grezzo — non richiede (né rimuove) il classico wrapper begin 644 ... / end che lo strumento da riga di comando uuencode aggiunge.
Sintassi
convert_uudecode(string $string): string|falseLa funzione accetta un parametro, $string — il dato uuencoded da decodificare — e restituisce i dati decodificati. Restituisce false se l'input non è un dato uuencoded valido.
Esempio di base: andata e ritorno di una string
Il modo più chiaro per vedere convert_uudecode() in azione è codificare una string e poi decodificarla:
<?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;
?>L'output di questo codice è:
Hello, World!Il valore decodificato è identico byte per byte alla string di partenza. Questo schema di andata e ritorno è il modo affidabile di usare la funzione: si codifica con convert_uuencode(), si memorizza o trasmette il testo codificato, poi si decodifica con convert_uudecode() dall'altra parte.
Decodificare un file uuencoded
Un caso reale comune consiste nel leggere contenuto uuencoded da un file e riscrivere i byte decodificati:
<?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";
?>Qui file_get_contents() legge il testo codificato, convert_uudecode() lo decodifica e file_put_contents() salva i byte originali in un nuovo file. Verificare i valori restituiti protegge da file mancanti o input corrotti.
Insidie
- Si abbina a
convert_uuencode(), non allo strumento shelluuencode. I dati prodotti dal comando standaloneuuencodeincludono un'intestazionebegin 644 namee un piè di paginaend. Fornire quel wrapper direttamente aconvert_uudecode()non restituirà i byte originali — occorre rimuovere prima intestazione e piè di pagina, oppure ricodificare il corpo conconvert_uuencode(). - Un input non valido restituisce
false. Controllare sempre il risultato prima di utilizzarlo, soprattutto quando i dati provengono da un file o dalla rete. - uuencode non è cifratura. Si limita a rendere i dati binari stampabili; non offre alcuna sicurezza. Chiunque può decodificarli.
Quando usarla (e quando non farlo)
Usa convert_uudecode() quando devi interoperare con un sistema legacy che già utilizza uuencode. Per il nuovo codice, preferisci Base64 (base64_encode() / base64_decode()): è lo standard moderno per incorporare in sicurezza dati binari in JSON, data URI e intestazioni HTTP, ed è supportato ovunque.
Funzioni correlate
convert_uuencode()— la controparte di codifica di questa funzione.base-convert()— converte numeri tra basi numeriche diverse.