mauro26 0 Denunciar post Postado Março 8, 2011 Olá pessoal, ando com um problema ao receber o email, na caixa de correio aparece-me caracteres estranhos, alguém me sabe dizer o que estou a fazer de errado no codigo, eu até pus em utf8, mas continuame a dar errado. Cumprimentos <?php $nome=$_POST["nome"]; $loja=$_POST["loja"]; $telefone=$_POST["telefone"]; $email=$_POST["email"]; $comentarios=$_POST["comentarios"]; ?> <div class="texto_loja"> <p class="text"><?php $headers = "From: $email" . "\r\n" . "Content-type: text/plain; charset=utf-8" . "\r\n" . "X-Mailer: PHP/" . phpversion(); $to = "meuemail"; $subject = "Pedido de informação - site loja"; $body = "nome: $nome, loja: $loja, telefone: $telefone, email: $email, mensagem: $comentarios"; if (mail( $to , $subject , $body, $headers )) { echo("$nome, o seu pedido foi enviado com sucesso.<br /> Em breve entramos em contacto consigo.<br /> Obrigado."); } else { echo("$nome, ocorreu um erro.<br /> Por favor volte a tentar.<br /> Obrigado."); } ?></p> </div> Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Oi! Onde aparecem os caracteres estranhos? Corpo da mensgaem? Assunto? From? Compartilhar este post Link para o post Compartilhar em outros sites
mauro26 0 Denunciar post Postado Março 8, 2011 Aparece no $subject Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Aha! Tive o mesmo problema quando comecei a trabalhar com emails. Não lembro bem o motivo do problema pois faz muito tempo. Se alguem se habilitar em ajudar explicando o problema, agradeco. Achei a solucao na net, codificando o subject com quoted_printable_encode() ou base64_encode() e desenvolvi esta funcao: Function Email_Encode($String = '', $Caracteres = 'ISO-8859-1') { // Quoted-printed (Q) If (function_exists('quoted_printable_encode')) { $String = quoted_printable_encode($String); $RT = '=?'.$Caracteres.'?Q?'.$String.'?='; } Else // IMAP 8bit (Q) If (function_exists('imap_8bit')) { $String = imap_8bit($String); $RT = '=?'.$Caracteres.'?Q?'.$String.'?='; } Else // Base64 (B) { $String = base64_encode($String); $RT = '=?'.$Caracteres.'?B?'.$String.'?='; } Return $RT; } Como usar Adicone a função ao seu codigo e chame-a, como no exemplo abaixo: // SUBSTITUA if (mail( $to , $subject , $body, $headers )) { // POR if (mail( $to , Email_Encode($subject, 'UTF-8') , $body, $headers )) { Observer que usei sua codificacao (UTF-8). Compartilhar este post Link para o post Compartilhar em outros sites
mauro26 0 Denunciar post Postado Março 8, 2011 Vou tentar o resultado :) Porque a funçao em cima está em ISO-8859-1? E em baixo utf8? Abraço Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Vou tentar o resultado :) Porque a funçao em cima está em ISO-8859-1? E em baixo utf8? Abraço E so o valor padrao do segundo parametro da funcao, como '' é o padrao do primeiro parametro. Como eu uso ISO, defini esse padrao pra poder chamar a funcao so com [ $var = Email_Encode($subject); ]. Neste caso, como a funcao tem um valor padrao para o parametro $Caracteres, e este é o valor que uso, nao preciso seta-lo durante minha chamada. Contudo, se quiser, eu posso chamar assim [ $var = Email_Encode($subject, 'ISO-8859-1'); ]. No seu caso, se nao setar o segundo parametro ele vai entender que quer usar o padrao e dara problemas porque voce usa UTF-8, conforme seu script, por isso na sua chamada deve especificar. Espero que tenha entendido! :D Compartilhar este post Link para o post Compartilhar em outros sites
mauro26 0 Denunciar post Postado Março 8, 2011 Bem, já tentei no subject não aparece os caracteres estranhos, mas no corpo da mensagem apareceume :S Compartilhar este post Link para o post Compartilhar em outros sites
ro.fonseca 1 Denunciar post Postado Março 8, 2011 Se nao me engano, acontece quebra de caracteres no Hotmail ao se utilizar o padrão utf8, eu sempre uso o iso. Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Certo! O conteudo do seu primeiro post é todo o conteudo da pagina que envia o email? Se for tente adicionar isto no inicio: <?php // ADD ISTO header('content-type: text/html; charset=UTF-8'); $nome=$_POST["nome"]; $loja=$_POST["loja"]; $telefone=$_POST["telefone"]; $email=$_POST["email"]; $comentarios=$_POST["comentarios"]; ?> Isto vai dizer ao php que ele deve processar o conteudo da pagina com a codificacao UTF-8, igualmente usada no envio do email. Compartilhar este post Link para o post Compartilhar em outros sites
ro.fonseca 1 Denunciar post Postado Março 8, 2011 Tem q saber tb se no teu framework qual codigo padrao ele gera quando tu salva o arquivo, acontece muita bronca por causa disso tb, tipo tu faz o arquivo em UTF8 e ele está sendo salvo como ISO. Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Tem q saber tb se no teu framework qual codigo padrao ele gera quando tu salva o arquivo, acontece muita bronca por causa disso tb, tipo tu faz o arquivo em UTF8 e ele está sendo salvo como ISO. Bem lembrado! No meu PHP.INI (+/- linha 700): default_charset = "iso-8859-1" Compartilhar este post Link para o post Compartilhar em outros sites
mauro26 0 Denunciar post Postado Março 8, 2011 Pois, fiz isso, mas agora ao ter feito isso afectoume os caracteres todos do site, e se tentasse fazer igual acima com o $subject e $body?Será que daria? Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Março 8, 2011 Pois, fiz isso, mas agora ao ter feito isso afectoume os caracteres todos do site, e se tentasse fazer igual acima com o $subject e $body?Será que daria? No body não! O problema ai e a codificacao de suas pagina mesmo. So no subject e no from ou to e etc, nos campos passados pelo header. Pois estes valores serao lidos diretamente pelo servidor de email! A sua pagina e qual codificacao? UTF ou ISO? Se estive usando ISO mude a cofificacao do email pra isso e o content do header da minha dica anterior pra iso tb. deixe a mesma codificacao em tudo. Compartilhar este post Link para o post Compartilhar em outros sites