Foros del Web » Programando para Internet » PHP »

Codificación de caracteres en formulario, problema.

Estas en el tema de Codificación de caracteres en formulario, problema. en el foro de PHP en Foros del Web. Hola buenas! Veréis, estoy intentando implementar un formulario de email a una web y al parecer al cliente en los emails le llegan los carácteres ...
  #1 (permalink)  
Antiguo 15/02/2012, 05:56
Avatar de elacunza  
Fecha de Ingreso: mayo-2011
Mensajes: 46
Antigüedad: 12 años, 11 meses
Puntos: 0
Codificación de caracteres en formulario, problema.

Hola buenas!

Veréis, estoy intentando implementar un formulario de email a una web y al parecer al cliente en los emails le llegan los carácteres (tildes eñes y demás) codificados. El formulario es el siguiente:

<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[2] = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$errors[3] = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$errors[4] = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "[email protected]"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre $email\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //

if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '<div class="result_ok"><h5>Email enviado correctamente </h5></div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail"><h5>Hubo un error al enviar el mensaje</h5> </div>';
}
}
}
?>

<form class='contacto' method='post' action=''>
<div><label>Your name:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'/><?php echo $errors[1] ?></div>
<div><label>Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'/><?php echo $errors[2] ?></div>
<div><label>Subject:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'/><?php echo $errors[3] ?></div>
<div><label>Message:</label><textarea rows='6' cols="1" class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $errors[4] ?></div>
<div><input type='submit' value='SEND' class='boton' name='boton'/></div>
<?php echo $result; ?>
</form>

---------------------



Había pensado sustituir el charset por utf-8 en la siguiente línea:
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //

Desde la total ignorancia de php, creo que podría ser lo más sencillo del mundo o la mayor chapuza.
¿Tiene algún sentido esto? o conllevaría un proceso mucho más costoso?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 15/02/2012, 06:20
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Codificación de caracteres en formulario, problema.

Hola

Seguramente la página que contiene el formulario tenga una codificación distinta a la que estás mandar a través del email. Si la página del formulario recoge los inputs en UTF-8 y luego tú intentas mandarlos por email en ISO-8859-1 te dará estos problemas.

Así que prueba con cambiar a UTF-8 en el header del email.

Saludos.
  #3 (permalink)  
Antiguo 16/02/2012, 02:23
Avatar de elacunza  
Fecha de Ingreso: mayo-2011
Mensajes: 46
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Codificación de caracteres en formulario, problema.

Muchas gracias kikos.
Efectivamente la página en si esta en utf-8, de todas maneras, ayer instalé el mismo formulario en otra web también en utf-8 y los emails llegaban estupendamente.
¿Puede que se deba al cliente del email? yo lo abrí con gmail y el cliente creo que con outlook o algún programa parecido.

Gracias!
un saludo.
  #4 (permalink)  
Antiguo 16/02/2012, 05:50
Avatar de elacunza  
Fecha de Ingreso: mayo-2011
Mensajes: 46
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Codificación de caracteres en formulario, problema.

Bueno, siento el doble post, pero el problema ha evolucionado.

Al parecer, cuando al cliente le llegan emails de este formulario, la dirección del email del que ha enviado el mensaje, aparece con un formato extraño como por ejemplo el siguiente:

[email protected]

El mayor problema con esto es no poder responder a dichos emails, qué puedo hacer? no se por qué pasa esto :S

Última edición por elacunza; 16/02/2012 a las 05:57
  #5 (permalink)  
Antiguo 16/02/2012, 07:28
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Codificación de caracteres en formulario, problema.

Prueba con esto:
Código PHP:
//Cabeceras del correo
$headers =  "From: $nombre <$email>\r\n"//Quien envia?
$headers =  "Reply-To: $nombre <$email>\r\n"//Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n"//

if(mail($dest,$asunto,$cuerpo,$headers"-f $email")) 
El problema es que tu servidor sobreescribe la dirección que tu le pasas manualmente. Esto es para evitar hacer pishing.

La verdad es que el tema de los emails es un poco peculiar y deberías estudiar bien cómo funciona. Sobretodo porque tal y como lo tienes todo el correo irá a parar a la carpeta de SPAM.

Saludos.

Última edición por kiko's; 16/02/2012 a las 07:34
  #6 (permalink)  
Antiguo 17/02/2012, 02:19
Avatar de elacunza  
Fecha de Ingreso: mayo-2011
Mensajes: 46
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Codificación de caracteres en formulario, problema.

Mil gracias kiko´s, probaré con esto.

Etiquetas: caracteres, formulario, html, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:35.