Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Criei um formulário que quando enviado, é inserido no banco de dados e enviado um e-mail para o administrador, está funcionando perfeitamente se não fosse por um detalhe: o e-mail é enviado, porém quando se vai visualizar o e-mail, os caracteres especiais não aparecem, está desconfigurado. No banco de dados está tudo normal com os caracteres especiais.
Segue abaixo a página que insere no banco de dados e envia pro e-mail:
<?php require_once('../Connections/conectar.php'); ?>
<?php
$i1 = $_POST['i1'];
$i2 = $_POST['i2'];
$i3 = $_POST['i3'];
$i4 = $_POST['i4'];
$i5 = $_POST['i5'];
$hora = $_POST['hora'];
$data = $_POST['data'];
$mensagem = "<b>Nome:</b> \t$i1<br />";
$mensagem .= "<b>Cidade:</b> \t$i2<br />";
$mensagem .= "<b>Login:</b> \t$i3<br />";
$mensagem .= "<b>Senha:</b> \t$i4<br />";
$mensagem .= "<b>E-mail:</b> \t$i5<br />";
//$mensagem = "$msg";
$remetente = "$i5";
$destinatario = "email@email.com";
$assunto = "Cadastro do Site";
$headers = "From: ".$remetente."\nContent-type: text/html";
if(!mail($destinatario,$assunto,$mensagem,$headers)){
header('Location: erro.php');
} else {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO cadastros (i1, i2, i3, i4, i5, data, hora) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['i1'], "text"),
GetSQLValueString($_POST['i2'], "text"),
GetSQLValueString($_POST['i3'], "text"),
GetSQLValueString($_POST['i4'], "text"),
GetSQLValueString($_POST['i5'], "text"),
GetSQLValueString($_POST['data'], "text"),
GetSQLValueString($_POST['hora'], "text"));
mysql_select_db($database_conectar, $conectar);
$Result1 = mysql_query($insertSQL, $conectar) or die(mysql_error());
$insertGoTo = "confirma_cadastro.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
mysql_select_db($database_conectar, $conectar);
$query_Recordset1 = "SELECT * FROM cadastros";
$Recordset1 = mysql_query($query_Recordset1, $conectar) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
mysql_free_result($Recordset1);
header('Location: confirma_cadastro.php');
}
?>
Fazendo mais pesquisas enquanto esperava respostas, encontrei algo que resolvia meu problema parcialmente...
Depois das variaveis $mensagem, adicionei o seguinte:
$msg = htmlentities($mensagem, ENT_QUOTES);
//$mensagem = "$msg";
$remetente = "$i5";
$destinatario = "email@email.com";
$assunto = "Cadastro do Site";
$headers = "From: ".$remetente."\nContent-type: text/html";
if(!mail($destinatario,$assunto,$msg,$headers))
Agora está aparecendo os acentos e tudo, porém ele não está interpretando os códigos html como <br> ou <b>, poderiam me dizer como resolver agora?
>
Acrescente os headers corretamente
$headers .= sprintf( 'Date: %s%s', date( "D, d M Y H:i:s O" ), PHP_EOL );
$headers .= sprintf( 'Return-Path: %s%s', $from, PHP_EOL );
$headers .= sprintf( 'From: %s%s', $from, PHP_EOL );
$headers .= sprintf( 'Reply-To: %s%s', $from, PHP_EOL );
$headers .= sprintf( 'Message-ID: <%s@%s>%s', md5( uniqid( rand( ), true ) ), $_SERVER[ 'HTTP_HOST' ], PHP_EOL );
$headers .= sprintf( 'X-Priority: %d%s', $priority, PHP_EOL );
$headers .= sprintf( 'X-Mailer: PHP/%s%s', phpversion( ), PHP_EOL );
$headers .= sprintf( 'Disposition-Notification-To: %s%s', $from, PHP_EOL );
$headers .= sprintf( 'MIME-Version: 1.0%s', PHP_EOL );
$headers .= sprintf( 'Content-Transfer-Encoding: 8bit%s', PHP_EOL );
$headers .= sprintf( 'Content-Type: %s; charset="%s"%s', $content_type, $charset, PHP_EOL );
Tentei fazer isso e ao invés de aparecer <b> ou <br> está aparecendo <b> ou <br /> e os acentos que estavam aparecendo antes estão do mesmo jeito do <b> ou <br>$headers = "MIME-Version: 1.1";
$headers .= "Content-type: text/html; charset=UTF-8";
Poem isso ai
>
$headers = "MIME-Version: 1.1";
$headers .= "Content-type: text/html; charset=UTF-8";
Poem isso ai
Ficou da mesma forma do que o Carlos Coelho sugeriu, ao invés de aparecer <b> ou <br> está aparecendo <b> ou <br /> e os acentos que estavam aparecendo antes estão do mesmo jeito do <b> ou <br>
Consegui resolver, eu coloquei:
$cod = get_html_translation_table(HTML_ENTITIES);
$mensagem = "<b>Nome:</b> \t$i1<br />";
$mensagem .= "<b>Cidade:</b> \t$i2<br />";
$mensagem .= "<b>Login:</b> \t$i3<br />";
$mensagem .= "<b>Senha:</b> \t$i4<br />";
$mensagem .= "<b>E-mail:</b> \t$i5<br />";
$msg = htmlspecialchars_decode(strtr($mensagem, $cod), ENT_QUOTES);
//$mensagem = "$msg";
$remetente = "$i5";
$destinatario = "email@email.com";
$assunto = "Cadastro do Site";
$headers = "From: ".$remetente."\nContent-type: text/html";
if(!mail($destinatario,$assunto,$msg,$headers))
>
Consegui resolver, eu coloquei:
$msg = htmlspecialchars_decode(strtr($mensagem, $cod), ENT_QUOTES);
htmlentities — Converte todos os caracteres aplicáveis em entidades html.
Exemplo #1 Exemplo da htmlentities()
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
você estava convertendo os caracteres com htmlentities mas não estava 'desfazendo'
htmlspecialchars_decode — Converte especiais entidades HTML para caracteres
Exemplo #1 Um exemplo da htmlspecialchars_decode()
<?php
$str = '<p>this -> "</p>';
echo htmlspecialchars_decode($str);
// note that here the quotes aren't converted
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>
Acrescente os headers corretamente