Eliminar tildes y ñ

Ante mano agradecerte tu tiempo invertido en esto.
Te cuento mi problema, que llevo queriendo resolver hace un par de días y no hay forma.
Tengo una web muy sencilla, sin base de datos ni nada.
En ella hay un formulario de inscripción, donde el usuario rellena los campos y estos llegan a mi correo.
El problema llega cuando el usuario me introduce los siguientes datos:
Apellidos: Garcés
País: España
Cuando le da a enviar, a mi correo me llega la siguiente información:
Apellidos: ¿Garc?s
Pais:¿Espa?a
He probado varias formas de corregirlo, pero no lo he conseguido
Te voy a pasar mi código a ver si me puedes ayuda, gracias:
<?php
}else{
$headers = "MIME-Version: 1.0\r \n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r \n";
$headers .= "From: Arqueologia_Espacial";
$headers .= "Reply-To: \"$nombre\" <$emailwebmaster>\r \n";
$headers .= "X-Priority: 3\r \n";
$headers .= "X-MSMail-Priority: High\r \n";
$headers .= "X-Mailer: Just My Server";
function reemplazaMe($text) {
utf8_encode($text);
$codigo= array("á","é","í","ó", "ú","ü","ñ");
$cambiar = array("á","é","í","ó","ú","ü","ñ");
$text = str_replace($codigo, $cambiar, $text);
$text= strtolower($text);
return $text;
}
$cuerpo = "Formulario enviado\n";
$apellidos2= $_POST ["apellidos"];
$testeo = htmlentities($apellidos2, ENT_QUOTES, 'iso-8859-1');
$aux=reemplazaMe($testeo);
//echo $aux;
$cuerpo .= "Apellidos: " . $aux . "\n";
$cuerpo .= "Nombre:  " .  $_POST ["nombre"] . "\n";
$cuerpo .= "DNI:  " .  $_POST ["dni"] . "\n";
$sujeto= "Arqueologia Espacial";
$mensaje= "Por la presente: \n hacemos acuse de recibo de su inscripcion al VI Coloquio Internacional de Arqueologia Espacial: Arqueologia de la Poblacion \n Atentamente: \n  Secretaria del congreso.";
if($correo !="")
{echo mail("$correo","$sujeto","$mensaje","$headers" );}
mail("[email protected]","Formulario recibido",$cuerpo);
echo "Gracias por rellenar el formulario. Se ha enviado correctamente.";
}
?>
Respuesta
1
Uhmmm.. me parece que te estás mareando con las conversiones, hazlo todo en plan simple, es decir, conserva esto:
$headers .= "Content-type: text/html; charset=iso-8859-1\r \n";
Pero elimina las lineas del $aux=reemplazaMe($testeo);
Asegurate que la página también tiene en su definición la iso-8859-1
¿Cómo hago para que la página tengo la definición iso-8859-1?
Gracias
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

1 respuesta más de otro experto

Respuesta
1
¿Por qué le indicas que el charset del mail es iso y luego codificas el texto con utf?
¿Qué pasa si lo envías según lo recibes? ¿Sin pasar por htmlentities ni por la función reemplazaMe?
Por cierto, no veo en dónde indicas el país en el correo...
Simplemente me lo e opiado de internet
Si lo envío según lo recibo me pone esto:
apellidos: Garc?s
En vez de poner:
Apellido:Garcés
Lo del país es un ejemplo para que veas que tampoco me coge bien la ñ
Gracias
Si vas a hacer la codificación UTF que tenías planteado, quizá sería conveniente cambiar el charset del email de ISO a UTF-8 (charset=UTF-8).
¿Lo pruebas y me dices?
Sino, también puedes probar, justo antes de hacer mail(), a poner esto:
if(mb_detect_encoding($cuerpo, 'UTF-8, ISO-8859-1', true) != 'ISO-8859-1')
{
        $mensaje = utf8_decode($cuerpo);
}
A ver si damos con ello!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas