Jump to content
JTGFerreira

Caracteres em PHP

Recommended Posts

JTGFerreira

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
pugas

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.