W3docs

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

Recebe um único argumento e retorna a string decodificada.

ParâmetroTipoDescrição
$stringstringA 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

php— editable, runs on the server

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=A8 fornece 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 com mb_decode_mimeheader() ou iconv_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

Prática

Prática
O que a função quoted_printable_decode() faz no PHP?
O que a função quoted_printable_decode() faz no PHP?
Was this page helpful?