Ir para conteúdo

Arquivado

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

Zoação

Form. PHP (problemas na acentuação) Veja o código que estou usando

Recommended Posts

Sempre que envio alguma mensagem que possua acentuação gráfica, ao abrir o e-mail na caixa postal do webmail, chega tudo desconfigurado, vejam um exemplo:

Caracteres digitados no formulário:
áéíõã - Teste de acentuação no campo do formulário

Caracteres que são recebidos (chega desta forma):
????? - Teste de acentua??o no campo do formul?rio

 

Estou tendo problemas com estes arquivos sempre que envio uma mensagem através do formulário HTML. Vejam os códigos abaixo, o que pode estar errado?


--------------------------------- CÓDIGO HTML ----------------------- form.html --------------------------------------------------


<head>
<style type="text/css">
.auto-style1 {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: xx-small;
}
.auto-style2 {
text-align: center;
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: xx-small;
}
.auto-style4 {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: xx-small;
margin-bottom: 0px;
}
.auto-style5 {
text-align: right;
}
</style>
<title>Cadastre seu e-mail</title>
</head>

<body style="margin: 5; ">

<form name="form1" method="post" action="form.php">
<table align="center" cellpadding="0" cellspacing="0" style="width: 195">
<tr>
<td class="auto-style2" colspan="2"><strong>RECEBA NEWS</strong></td>
</tr>
<tr>
<td style="width: 230px" class="auto-style1" colspan="2">
<strong>Nome:</strong></td>
</tr>
<tr>
<td style="width: 230px" colspan="2">
<input name="nome" type="text" id="nome" class="auto-style1" style="width: 176px"></td>
</tr>
<tr>
<td style="width: 230px" class="auto-style1" colspan="2">
<strong>Email:</strong></td>
</tr>
<tr>
<td style="width: 230px" colspan="2">
<input name="email" type="text" id="email" class="auto-style4" style="width: 176px"></td>
</tr>
<tr>
<td style="width: 230px" class="auto-style5">
<input type="submit" name="Submit" value="Enviar" class="auto-style1"></td>
<td style="width: 30" class="auto-style5">
 </td>
</tr>
</table>
</form>

---------------------- FIM DO CÓDIGO HTML ---------------------------------------------------------------------------------------------------------------

---------------------- INÍCIO DO CÓDIGO PHP ---------------------------------- form.php -------------------------------------------------------------

<?php
$nome = $_POST["nome"];
$email = $_POST["email"];
$mensagem .= "Nome: $nome\n";
$mensagem .= "E-mail: $email\n\n";
mail("email@email.com.br", "CadastroNews", $mensagem, "From: $email");
echo "<h3><center> Obrigado! Seu cadastro foi realizado com sucesso!!!<center></h3>\n\n";
?>

----------------- FIM DO CÓDIGO PHP --------------------------------------------------------------------------------------------------------------------

Obrigado pela ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que passar o charset nos headers

 

$headers.= "Content-type: text/html; charset=iso-8859-1\r\n";

 

 

<?php
// Aqui vamos configurar o cabeçalho (header) do e-mail, formatos, remetentes, destinatários de cópias
$headers = "MIME-Version: 1.0\r\n";
// Aqui definirmos o formato padrão HTML e a codificação do Texto
$headers.= "Content-type: text/html; charset=iso-8859-1\r\n";
// Abaixo estabelecemos o Remetente do E-mail com o From:
$headers.= "From: roberto.carlos@gmail.com\r\n";
// Caso se queira especificar o e-mail de Resposta, utilizamos o Reply-To:, caso você não queira, basta excluir a linha abaixo
$headers.= "Reply-To: roberto.carlos@gmail.com\r\n";
// Se desejar enviar cópia para outro e-mail utiliza-se o Bcc:, especificando o e-mail de destino, se não quiser mandar essa cópia, basta remover a linha abaixo
$headers.= "Bcc: roberto_carlos@hotmail.com\r\n";
// Nesta linha abaixo, configuramos o e-mail do destinatário, caso queira especificar mais de 1 destinatário, basta colocar uma virgula (,) e o outro e-mail, ex: fulano@gmail.com, fulano2@gmail.com
$destinatario = "fulano@gmail.com";
// Definimos o assuntos do nosso e-mail
$assunto = "Teste da Função mail()";

// Abaixo, vamos colocar o corpo da mensagem, lembrando que como definimos que será em padrão HTML acima no cabeçalho, você terá de utilizar tags HTML abaixo, veja o exemplo
$mensagem = '
<html>
<head>
   <title>Teste de Envio</title>
</head>
<body>
<font face="Arial" size="2" color="#333333">
<br />
Nome: <b>Roberto Carlos</b><br />
E-mail: <b>roberto.carlos@gmail.com</b>
</font>
</body>'; 

// Definido todos os parametros, agora podemos proceder com o envio, conforme a linha abaixo, lembre-se sempre de verificar se todos os parâmetros estão corretamente especificados
mail($destinatario, $assunto, $mensagem, $headers);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o que ocorreu agora ...

 

Enviei:

Nome: teste áí ã

E-mail: teste

 

 

Chegou:

Nome: teste áí ãE-mail: teste

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema pode esta ocorrendo na codificação da sua página html, verifique se o charset do seu html é compatível com o que esta enviando. Codificação pode ser utf-8 e iso-8859-1.

Recomendo usar o charset utf-8 no seu header do php.

Caso o problema persista converta as variáveis recebidos do post através da função utf_decode();

Verifique também a codificação / charset do e-mail.

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.