Ir para conteúdo

POWERED BY:

Arquivado

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

erikoliv

[Resolvido] problemas de acentuação no mail php

Recommended Posts

Bom dia! eu começei postando uma função de múltiplos checkbox para mail() em php, eu até consegui fazer funcionar, mas fiquei travado em um problema de acentuação. O que acontece são 2 problemas:

 

1- no gmail os carácteres gerados pelo .PHP ficam corretos e os capturados pelo método $_POST da página .html ficam bagunçados.

 

EX:

Nome: ADMIN

Email: john@ilm.com

Empresa/serviço: teste php

Público-alvo: indef

 

Projeto pretendido: Impresso

Projeto pretendido: Digital

Projeto pretendido: Web

Projeto pretendido: Design Thinking - empresa

Projeto pretendido: Design thinking - serviço

 

 

Outro tipo de projeto:

Prazo pretendido: 10 dias

Investimento pretendido: R$0

Descrição do projeto:

 

teste áà ãâçÇ

 

Onde o cliente nos encontrou: Google

Outro meio não descrito pelo qual o cliente nos encontrou:

 

 

2- Já no webmail de meu host acontece o contrário, os carácteres gerados pelo .PHP ficam bagunçados e os capturados pelo método $_POST da página .html ficam certos.

 

EX:

Nome: ADMIN

Email: john@ilm.com

Empresa/servi�o: teste php

P�blico-alvo: indef

 

Projeto pretendido: Impresso

Projeto pretendido: Digital

Projeto pretendido: Web

Projeto pretendido: Design Thinking - empresa

Projeto pretendido: Design thinking - serviço

 

 

Outro tipo de projeto:

Prazo pretendido: 10 dias

Investimento pretendido: R$0

Descri��o do projeto:

 

teste áàãâçÇ

 

Onde o cliente nos encontrou: Google

Outro meio n�o descrito pelo qual o cliente nos encontrou:

 

 

Ambos os arquivos .php e .html estão formatados em UTF8 (Eu uso o notepad++)

Ainda assim estão setados para UTF8:

 

No .html

<meta charset="UTF-8">

 

E no .PHP

ini_set('default_charset', 'utf-8');

 

Meu webmail do Cpannel está configurado para exibir mensagem em UTF8 eu uso o webmail Roundcube.

Meu Gmail não sei como está configurado...não encontrei a esta opção em configurações...

 

A minha dúvida é...se todos os arquivos estão configurados para UTF8 porque chega bagunçado em minha caixa de entrada tando visualizada pelo webmail quanto pelo gmail ??

 

 

Vou postar abaixo o texto que eu iria postar para entenderem o que eu codifiquei.

 

Bom dia!! Quebrei muito a cabeça com essa função. Como enviar um formulário com múltiplos checkbox via função mail().

 

vou resumir meus códigos:

 

(Para facilitar meu trabalho eu separei em dois arquivos - 1 .html contendo o formulário e 1 .php contendo a função de enviar para o meu email)

 

 

orçamento.html

<!-- início do formulário -->
<form id="contact_form" class="contact_form" action="orcamento.php" method="post" name="contact_form">
 <ul>
   <li> <!-- opções em checkbox -->
     <label for="projeto">Projeto solicitado:</label>
     <input type="checkbox" name="projeto[]" id="projeto" value="Impresso">Impresso<br>
     <input type="checkbox" name="projeto[]" id="projeto" value="Digital" >Digital<br>
     <input type="checkbox" name="projeto[]" id="projeto" value="Web">Web<br>
     <input type="checkbox" name="projeto[]" id="projeto" value="Design Thinking - empresa">Design Thinking - empresa<br>
     <input type="checkbox" name="projeto[]" id="projeto" value="Design thinking - serviço">Design thinking - serviço<br>
     <input type="checkbox" name="projeto[]" id="projeto" value="Outros">Outros<br>
   </li>

   <li> <!-- descrição de outra opção nao listada -->
     <label for="outros">Outros:</label>
     <input type="text" name="outros" id="outros" placeholder="Qual seria o projeto pretendido?">
   </li>
   <li> <!-- botão de enviar -->
     <button type="submit" id="submit" name="submit" class="button fright">Enviar</button>
   </li>	
</ul>			
</form>

 

Note que para funcionar é preciso colocar o "name" dos checkbox com [] no final, no meu caso ficou assim:

 

<input type="checkbox" name="projeto[]" id="projeto" value="Impresso">Impresso<br>

 

 

orçamento.php

<?php

$EmailFrom = $_REQUEST['email']; // remetende de quem preenche o formulário
$EmailTo = "contato@seuemail.com"; // coloque seu email aqui (email para onde o formulário será enviado)
$Subject = "ORÇAMENTO - Nome da minha agência"; // assunto padrão

// as variáveis do meu formulario de orçamento

$Name = Trim(stripslashes($_POST['name'])); 
$Email = Trim(stripslashes($_POST['email'])); 
$Empresa = Trim(stripslashes($_POST['empresa']));
$Publico = Trim(stripslashes($_POST['publico']));
$Outros = Trim(stripslashes($_POST['outros']));
$Prazo = Trim(stripslashes($_POST['prazo']));
$Investimento = Trim(stripslashes($_POST['investimento']));
$Descricao = Trim(stripslashes($_POST['descricao']));
$Analytics = Trim(stripslashes($_POST['analytics']));
$Outrosanalytics = Trim(stripslashes($_POST['outrosanalytics']));

// note que nestas variáveis eu não incluí o checkbox do campo projeto pois ele precisa de um loop

// validação
$validationOK=true;
if (!$validationOK) {
 echo "Error";
 exit;
}

// preparando o corpo do email
$Body = "";
$Body .= "Nome: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Empresa/serviço: ";
$Body .= $Empresa;
$Body .= "\n";
$Body .= "\n";
$Body .= "Público-alvo: ";
$Body .= $Publico;
$Body .= "\n";
$Body .= "\n";

// aqui finalmente eu coloquei o loop para chamar e imprimir no email somente as opções selecionadas do meu checkbox
foreach($_POST['projeto'] as $Projetos) //chama a variavel projeto
{
	// envia somente opções selecionadas
	$Body .= "Projeto pretendido: ";
	$Body .= $Projetos;
	$Body .= "\n";
};

$Body .= "Outro tipo de projeto: ";
$Body .= $Outros;
$Body .= "\n";
$Body .= "Prazo pretendido: ";
$Body .= $Prazo;
$Body .= "\n";
$Body .= "Investimento pretendido: ";
$Body .= $Investimento;
$Body .= "\n";
$Body .= "Descrição do projeto: ";
$Body .= "\n";
$Body .= "\n";
$Body .= $Descricao;
$Body .= "\n";
$Body .= "\n";
$Body .= "Onde o cliente nos encontrou: ";
$Body .= $Analytics;
$Body .= "\n";
$Body .= "Outro meio não descrito pelo qual o cliente nos encontrou: ";
$Body .= $Outrosanalytics;
$Body .= "\n";

// envia o email
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redireciona para a página de sucesso ou erro
if ($success){
 header('Location: enviado.html'); 
}
else{
   header('Location: erro.html');
}
?>

 

No meu caso especifiquei um assunto padrão:

$Subject = "ORÇAMENTO - Nome da minha agência";

 

Isto faz com que toda mensagem enviada por este formulário chege com o assunto: ORÇAMENTO - Nome da minha agência.

Caso queira que o usuário escreva seu próprio assunto é só adicionar ao html um campo de assunto:

 

<label for="name">Assunto:</label><input type="text" name="assunto" id="assunto" required class="required" >

 

E modificar o $Subject no .php como se fosse mais uma variável:

 

$Subject = Trim(stripslashes($_POST['assunto']));

 

Bom é isso ai. No meu caso funcionou, só tem um detalhe:

Caso o usuário selecione mais de uma opção em meu email ficaria assim:

 

...

Projeto pretendido: opção1

Projeto pretendido: opção2

Projeto pretendido: opção3

...

 

o certo seria:

 

...

Projeto pretendido: opção1, opção 2, opção 3

...

 

Mas isso já pe outra história e outra pesquisa =)

 

Eu vi algo sobre isso usando a função implode....mas não entendi direito. Quando eu encontrar a solução eu posto aqui.

 

Obrigado e espero ter ajudado alguém.

 

Bom é isso ai, se alguém puder me ajudar com a configuração dos carácteres eu agradeceria muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

utf8_encode($suaVariavel);

utf8_decode($suaVariavel);

 

Sim já tentei, mas deu erro, não entendi a lógica de como colocar o utf8_encode em minha variável já que minha variável está assim:

 

$Name = Trim(stripslashes($_POST['name']));

 

eu tentei:

$Name = utf8_encode (Trim(stripslashes($_POST['name'])));

 

e deu erro...

 

eu posso argumentar:

$Name = Trim(stripslashes($_POST['name']));
utf8_decode($Name);

 

mas tb não funciona...

 

eu tentei argumentar:

utf8_decode($Body);

 

e tb não funcionou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa enviando desta forma:

// envia o email
$success = mail($EmailTo, $Subject, $Body, "Content-Type:text/plain; charset=utf-8;\r\nFrom: <$EmailFrom>");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa enviando desta forma:

// envia o email
$success = mail($EmailTo, $Subject, $Body, "Content-Type:text/plain; charset=utf-8;\r\nFrom: <$EmailFrom>");

 

VALEW CAMARADAS!!!! consegui fazendo o seguinte:

 

fui em configurações de mensagem no Cpannel Roundcube Webmail e setei para charset=iso-8859-1

no início de meu .php eu pus:

ini_set('default_charset', 'iso-8859-1');
header("Content-type: text/html;charset=iso-8859-1");

 

Não sei se influênciou...e modifiquei minhas variáveis para:

$Body = "";
$Body .= "Nome: ";
$Body .= utf8_decode($Name);
$Body .= "\n";
$Body .= "Email: ";
$Body .= utf8_decode($Email);
$Body .= "\n";
$Body .= "Empresa/serviço: ";
$Body .= utf8_decode($Empresa);
$Body .= "\n";
$Body .= "Público-alvo: ";
$Body .= utf8_decode($Publico);
$Body .= "\n";
$Body .= "\n";

// loop over checked checkboxes
foreach($_POST['projeto'] as $Projetos) {
  // send only checked boxes
$Body .= "Projeto pretendido: ";
$Body .= utf8_decode($Projetos);
$Body .= "\n";;
};
$Body .= "\n";
$Body .= "\n";

$Body .= "Outro tipo de projeto: ";
$Body .= utf8_decode($Outros);
$Body .= "\n";
$Body .= "Prazo pretendido: ";
$Body .= $Prazo;
$Body .= "\n";
$Body .= "Investimento pretendido: ";
$Body .= utf8_decode($Investimento);
$Body .= "\n";
$Body .= "Descrição do projeto: ";
$Body .= "\n";
$Body .= "\n";
$Body .= utf8_decode($Descricao);
$Body .= "\n";
$Body .= "\n";
$Body .= "Onde o cliente nos encontrou: ";
$Body .= utf8_decode($Analytics);
$Body .= "\n";
$Body .= "Outro meio não descrito pelo qual o cliente nos encontrou: ";
$Body .= utf8_decode($Outrosanalytics);
$Body .= "\n";

 

E funcionou perfeitamente no Roundcube do Cpannel e no GMAIL (sem configurar o gmail).

 

Esse é meu primeiro post aqui como eu marco o tópico como respondido???

 

Obrigado a Haz e Lycoz pela ajuda!!

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.