Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mauro26

Caracteres estranhos ao receber o email

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.