sexta-feira, 4 de março de 2016

Acentuação no formulário usando PHPMailer

Para o envio do e-mail correr sem problemas, deverás garantir que tudo está a utilizar o mesmocharset. Caso não, terás que proceder a conversões para que o email chegue em condições.

Assumindo UTF-8

  1. Os documentos de PHP deverão estar com a codificação em UTF-8.
    Como lidar com isto depende do IDE a ser utilizado, mas seja num IDE ou num editor de texto, existe sempre a opção de definir a codificação do ficheiro, bem como um local onde a mesma pode ser visualizada:
    Captura de tela do Geany
  2. O documento que envia o e-mail deverá conter a seguinte linha:
    <?php
    header('Content-Type: text/html; charset=UTF-8');
    
    // o teu código
    ?>
    Colocar ao início do documento antes de qualquer output ou operação.
  3. A base de dados, as tabelas e seus respectivos campos deverão estar com a Collation em UTF-8.
    Para garantir que não vai existir necessidade de conversão entre charsets os dados devem ser armazenados numa base de dados que contenha um charset igual ao utilizado para processar os mesmos.
    Exemplo em MySQL
    ALTER DATABASE minhaBaseDados CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE minhaTabela CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
  4. O charset do PHPMailer por defeito é o iso-8859-1 conforme pode ser visto na documentação(Inglês). Para garantir um envio correcto com dados em UTF-8 é preciso definir o charset:
    $phpmail->CharSet = 'UTF-8';
  5. $phpmail->IsHTML(true);
  6. $phpmail->SetLanguage("br");
  7. $phpmail->Body = utf8_decode($body);
Com estes passos consegues garantir que em toda a tua aplicação os dados estão sempre com ocharset UTF-8 evitando assim problemas com caracteres especiais, caracteres acentuados e/ou eventuais conversões entre charsets
* a variável $body é o corpo da mensagem do e-mail. 

Nota:
Quando falamos em HTML e Ajax, as páginas devem conter os cabeçalhos também em UTF-8 para garantir uma apresentação correcta ao visitante e um envio correcto dos dados a partir do navegador para o servidor (Ajax):
<!-- HTML 5 -->
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    ...
  </head>
  <body>
    ...
  </body>
</html>

Nenhum comentário:

Postar um comentário