W3docs

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): string

Accetta un singolo argomento e restituisce la stringa decodificata.

ParametroTipoDescrizione
$stringstringLa 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

php— editable, runs on the server

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=A8 restituisce 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 usa mb_decode_mimeheader() o iconv_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

Esercitazione

Pratica
Cosa fa la funzione quoted_printable_decode() in PHP?
Cosa fa la funzione quoted_printable_decode() in PHP?
Was this page helpful?