quoted_printable_decode()
Artículo sobre la función PHP quoted_printable_decode(), usada para decodificar cadenas en formato quoted-printable. Útil para trabajar con
La función PHP quoted_printable_decode() convierte una cadena en formato quoted-printable de vuelta a su forma original de 8 bits. Quoted-printable es una codificación definida por MIME (RFC 2045) que permite que el texto con bytes no ASCII viaje de forma segura a través de sistemas —principalmente el correo electrónico— diseñados para manejar solo ASCII de 7 bits. Esta página explica cómo luce la codificación, cuándo es necesario decodificarla y los aspectos a tener en cuenta.
¿Qué es quoted-printable?
En la codificación quoted-printable, cualquier byte que no sea un carácter ASCII imprimible "seguro" se escribe como un signo igual seguido de su valor hexadecimal de dos dígitos. Por ejemplo, un espacio puede aparecer como =20 y la letra acentuada è (secuencia de bytes UTF-8 C3 A8) se convierte en =C3=A8. Un = solitario al final de una línea es un salto de línea suave utilizado para mantener las líneas codificadas por debajo de 76 caracteres; se elimina al decodificar.
Esta codificación se encuentra con mayor frecuencia en el cuerpo y los encabezados de los mensajes de correo electrónico, donde el encabezado Content-Transfer-Encoding: quoted-printable indica al cliente cómo se almacenó el texto.
Sintaxis
quoted_printable_decode(string $string): stringRecibe un único argumento y devuelve la cadena decodificada.
| Parámetro | Tipo | Descripción |
|---|---|---|
$string | string | La cadena quoted-printable a decodificar. |
Valor de retorno: la cadena de 8 bits decodificada. Las secuencias que no son quoted-printable válidas se devuelven sin cambios en lugar de generar un error.
Ejemplo básico
Aquí =20 es el código hexadecimal de un espacio (ASCII 32), por lo que la salida es:
Hello World!Decodificación de texto acentuado y saltos de línea suaves
La función destaca en contenido real que combina caracteres multibyte codificados con los saltos de línea suaves (= al final de línea) utilizados para ajustar líneas largas:
<?php
$encoded = "J=27interpr=C3=A8te=20du=20fran=C3=A7ais,=\n et c=27est tout.";
echo quoted_printable_decode($encoded);
?>Salida:
J'interprète du français, et c'est tout.Nótese dos cosas: cada par =XX (como =C3=A8 para è) se convierte de nuevo en su byte sin procesar, y el = final seguido de una nueva línea se elimina por completo, uniendo las dos líneas en una sola.
¿Cuándo usarla?
Recurra a quoted_printable_decode() cuando lea correo electrónico sin procesar —por ejemplo, al analizar un mensaje extraído de un buzón IMAP cuya parte está marcada con Content-Transfer-Encoding: quoted-printable. Es el inverso de quoted_printable_encode(), que se llama antes de enviar dicho contenido.
Algunas cosas a tener en cuenta:
- No cambia el conjunto de caracteres. Decodificar
=C3=A8produce los bytes UTF-8 sin procesar deè; el resultado solo es correcto si trata la salida como UTF-8. La función no sabe nada sobre codificaciones: simplemente revierte el escape hexadecimal. - Los encabezados con palabras codificadas son diferentes. Las líneas de asunto como
=?UTF-8?Q?...?=usan un formato relacionado pero distinto; decodifíquelas conmb_decode_mimeheader()oiconv_mime_decode()en su lugar. - La entrada no válida se tolera. Un
=aislado no seguido de un hexadecimal válido se deja como está, por lo que los datos malformados no generarán errores.
Funciones relacionadas
quoted_printable_encode()— la función de codificación complementaria.mail()— envío de correo electrónico desde PHP.utf8_encode()— convierte texto ISO-8859-1 a UTF-8.- PHP Strings — resumen del manejo de cadenas en PHP.