JTGFerreira 0 Report post Posted April 10, 2012 Boas (txi! mais um post sobre problemas com charset! Calma, desta vez não há base de dados.), Estou a fazer uma pagina em PHP que acede a uma conta Gmail e retira os emails. Os campos assunto, from e body apareciam com caracteres diferentes do esperado. Então usei a função "imap_utf8" e resolveu o problema nos dois primeiros, no entanto no ultimo continua a aparecer o mesmo... O output dos campos from e body antes usar a função eram diferentes, (apesar do texto ser o mesmo: 'ççç') no primeiro aparecia "=?ISO-8859-1?B?5+fn?=" enquanto que no body do email aparece =E7=E7=E7=E7 (codigo ASCII?). Ora, já definido o header para UTF-8, e depois de ter usado muitas funções fiquei sem saber o que fazer. Haja alguma alminha que me ajude aqui por favor. O codigo: <?php header("Content-Type: text/html; charset: UTF-8"); // ligar o gmail $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; $username = '***@gmail.com'; $password = '***'; /* tenta ligar-se */ $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); /* vai buscar os emails */ $emails = imap_search($inbox,'ALL'); /* Se houver emails cria um ciclo para percorrer cada email */ if($emails) { /* var com o output */ $output = ''; /* coloca os emails por ordem (mais recente primeiro) */ rsort($emails); /* Para cada email */ foreach($emails as $email_number) { /* retira informação de um email */ $overview = imap_fetch_overview($inbox,$email_number,0); $message = imap_fetchbody($inbox,$email_number,2); $header = imap_headerinfo($inbox, $email_number); $output.= "De: "; $output.= imap_utf8($overview[0]->from); $output.=" (" .$header->from[0]->mailbox . "@" . $header->from[0]->host . ")<br>"; $output.= "Assunto: "; $output.= imap_utf8($overview[0]->subject) . "<br>"; $output.= "Data: "; $output.= $overview[0]->date . "<br><br>"; /* body do email */ $output.= "Mensagem: <br>"; $output.= imap_utf8($message). "<br><br>"; $output.= "---------- $email_number ---------<br><br>"; } echo $output; } /* close the connection */ imap_close($inbox); ?> O resultado De: João Ferreira (***@gmail.com) Assunto: ççç Data: Tue, 10 Apr 2012 16:16:09 +0100 Mensagem: =E7=E7=E7=E7 -- Jo=E3o Ferreira ---------- 3 --------- De: Tiago Girão (***@gmail.com) Assunto: apenas outro teste Data: Tue, 10 Apr 2012 14:49:09 +0100 Mensagem: Viva, olha uma teste. -- Tiago Girao ---------- 2 --------- De: João Ferreira (***@gmail.com) Assunto: Email de Teste Data: Tue, 10 Apr 2012 11:48:54 +0100 Mensagem: Viva, este =E9 apenas um email de teste. Cumprimentos. -- Jo=E3o Ferreira ---------- 1 --------- Share this post Link to post Share on other sites
JTGFerreira 0 Report post Posted April 11, 2012 Já resolvi o problema, a solução está em usar a função: imap_qprint (http://us.php.net/manual/en/function.imap-qprint.php) Se ainda assim não funcionar sugiro que usem a solução do primeiro comentário do link que coloquei. Cumprimentos. Share this post Link to post Share on other sites
pugas 0 Report post Posted April 18, 2014 JTG Ferreira, muito obrigado por ter colocado esta solução neste forum. Me ajudou demais. Share this post Link to post Share on other sites