quoted_printable_decode()
Articolo sulla funzione PHP quoted_printable_decode(), utilizzata per decodificare una stringa quoted-printable nei suoi byte originali a 8 bit.
La funzione PHP quoted_printable_decode() converte una stringa quoted-printable nella sua forma originale a 8 bit. Il quoted-printable è una codifica definita da MIME (RFC 2045) che consente al testo contenente byte non ASCII di viaggiare in sicurezza attraverso sistemi — principalmente la posta elettronica — progettati per gestire solo il semplice ASCII a 7 bit. Questa pagina spiega come appare la codifica, quando è necessario decodificarla e le insidie a cui prestare attenzione.
Che cos'è il quoted-printable?
Nella codifica quoted-printable, qualsiasi byte che non sia un carattere ASCII stampabile "sicuro" viene scritto come un segno di uguale seguito dal suo valore esadecimale a due cifre. Ad esempio, uno spazio può apparire come =20 e la lettera accentata è (sequenza di byte UTF-8 C3 A8) diventa =C3=A8. Un = isolato alla fine di una riga è un soft line break usato per mantenere le righe codificate sotto i 76 caratteri; viene rimosso durante la decodifica.
Questo tipo di codifica si incontra più spesso nel corpo e nelle intestazioni dei messaggi di posta elettronica, dove l'intestazione Content-Transfer-Encoding: quoted-printable indica al client come è stato memorizzato il testo.
Sintassi
quoted_printable_decode(string $string): stringAccetta un singolo argomento e restituisce la stringa decodificata.
| Parametro | Tipo | Descrizione |
|---|---|---|
$string | string | La stringa quoted-printable da decodificare. |
Valore restituito: la stringa decodificata a 8 bit. Le sequenze che non sono valide in quoted-printable vengono restituite invariate senza generare un errore.
Esempio di base
Qui =20 è il codice esadecimale per uno spazio (ASCII 32), quindi l'output è:
Hello World!Decodifica di testo accentato e soft line break
La funzione eccelle nel gestire contenuti reali che mescolano caratteri multibyte codificati con i soft line break (= a fine riga) usati per spezzare le righe lunghe:
<?php
$encoded = "J=27interpr=C3=A8te=20du=20fran=C3=A7ais,=\n et c=27est tout.";
echo quoted_printable_decode($encoded);
?>Output:
J'interprète du français, et c'est tout.Si notano due aspetti: ogni coppia =XX (come =C3=A8 per è) viene riconvertita nel suo byte grezzo, e il = finale seguito da una nuova riga viene rimosso completamente, unendo le due righe in una sola.
Quando usarla?
Si ricorre a quoted_printable_decode() quando si legge una email grezza — ad esempio analizzando un messaggio recuperato da una casella IMAP la cui parte è contrassegnata con Content-Transfer-Encoding: quoted-printable. È l'inverso di quoted_printable_encode(), che si chiama prima di inviare tale contenuto.
Alcune cose da tenere a mente:
- Non modifica il set di caratteri. Decodificare
=C3=A8restituisce i byte UTF-8 grezzi perè; il risultato è corretto solo se si tratta l'output come UTF-8. La funzione non conosce le codifiche — si limita a invertire l'escaping esadecimale. - Le intestazioni encoded-word sono diverse. Le righe Subject come
=?UTF-8?Q?...?=usano un formato correlato ma distinto; per decodificarle si usamb_decode_mimeheader()oiconv_mime_decode(). - L'input non valido viene tollerato. Un
=isolato non seguito da hex valido viene lasciato invariato, quindi i dati malformati non generano eccezioni.
Funzioni correlate
quoted_printable_encode()— la controparte per la codifica.mail()— invio di email da PHP.utf8_encode()— converte testo ISO-8859-1 in UTF-8.- PHP Strings — panoramica sulla gestione delle stringhe in PHP.