quoted_printable_decode()
Artigo sobre a função PHP quoted_printable_decode(), usada para decodificar uma string quoted-printable. Útil para trabalhar com emails e MIME.
A função PHP quoted_printable_decode() converte uma string quoted-printable de volta para sua forma original de 8 bits. O quoted-printable é uma codificação definida pelo MIME (RFC 2045) que permite que textos contendo bytes não-ASCII sejam transmitidos com segurança por sistemas — principalmente e-mail — projetados para lidar apenas com ASCII de 7 bits simples. Esta página explica como a codificação funciona, quando você realmente precisa decodificá-la e os cuidados a tomar.
O que é quoted-printable?
Na codificação quoted-printable, qualquer byte que não seja um caractere ASCII imprimível "seguro" é escrito como um sinal de igual seguido de seu valor hexadecimal de dois dígitos. Por exemplo, um espaço pode aparecer como =20 e a letra acentuada è (sequência de bytes UTF-8 C3 A8) torna-se =C3=A8. Um = isolado no final de uma linha é uma quebra de linha suave usada para manter as linhas codificadas com menos de 76 caracteres; ele é removido na decodificação.
Você vai encontrar essa codificação com mais frequência no corpo e nos cabeçalhos de mensagens de e-mail, onde o cabeçalho Content-Transfer-Encoding: quoted-printable informa ao cliente como o texto foi armazenado.
Sintaxe
quoted_printable_decode(string $string): stringRecebe um único argumento e retorna a string decodificada.
| Parâmetro | Tipo | Descrição |
|---|---|---|
$string | string | A string quoted-printable a ser decodificada. |
Valor de retorno: a string de 8 bits decodificada. Sequências que não são quoted-printable válidas são retornadas sem alteração, sem gerar um erro.
Exemplo básico
Aqui =20 é o código hexadecimal de um espaço (ASCII 32), portanto a saída é:
Hello World!Decodificando texto acentuado e quebras de linha suaves
A função é especialmente útil em conteúdo real que mistura caracteres multibyte codificados com as quebras de linha suaves (= no final da linha) usadas para quebrar linhas longas:
<?php
$encoded = "J=27interpr=C3=A8te=20du=20fran=C3=A7ais,=\n et c=27est tout.";
echo quoted_printable_decode($encoded);
?>Saída:
J'interprète du français, et c'est tout.Observe duas coisas: cada par =XX (como =C3=A8 para è) é convertido de volta para seu byte bruto, e o = no final seguido de uma nova linha é removido por completo, unindo as duas linhas em uma.
Quando devo usar isso?
Use quoted_printable_decode() quando estiver lendo e-mail bruto — por exemplo, ao analisar uma mensagem obtida de uma caixa de correio IMAP cuja parte esteja marcada como Content-Transfer-Encoding: quoted-printable. É o inverso de quoted_printable_encode(), que você chama antes de enviar esse tipo de conteúdo.
Alguns pontos a considerar:
- Não altera o conjunto de caracteres. Decodificar
=C3=A8fornece os bytes UTF-8 brutos deè; o resultado só é correto se você tratar a saída como UTF-8. A função não conhece codificações — ela apenas reverte o escape hexadecimal. - Cabeçalhos encoded-word são diferentes. Linhas de assunto como
=?UTF-8?Q?...?=usam um formato relacionado, mas distinto; decodifique-os commb_decode_mimeheader()ouiconv_mime_decode(). - Entrada inválida é tolerada. Um
=isolado não seguido de hex válido é mantido como está, portanto dados malformados não causam erros.
Funções relacionadas
quoted_printable_encode()— a contraparte de codificação.mail()— envio de e-mail pelo PHP.utf8_encode()— converte texto ISO-8859-1 para UTF-8.- PHP Strings — visão geral do tratamento de strings em PHP.