Foros del Web » Programando para Internet » PHP »

Caracteres incorrectos al recibir un correo

Estas en el tema de Caracteres incorrectos al recibir un correo en el foro de PHP en Foros del Web. Hola a todos: Tengo un script para enviar mensaje de contacto desde la pagina web. el texto se recibe desde un formulario. El codigo es ...
  #1 (permalink)  
Antiguo 04/05/2006, 07:30
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
Caracteres incorrectos al recibir un correo

Hola a todos:

Tengo un script para enviar mensaje de contacto desde la pagina web.

el texto se recibe desde un formulario.

El codigo es el siguiente:
Código PHP:
<?php
##################################################
##      Formulario de Contacto       ##
##################################################

//Variables

$youremail="[email protected]"// Receptor del email.

$emailsubject="Mensaje Contacto"// Asunto de los mensajes.

$from_who="Contacto_web <[email protected]>";  // Emisor del Mesaje


if (getenv(HTTP_CLIENT_IP)){ 
$user_ip=getenv(HTTP_CLIENT_IP); 

else { 
$user_ip=getenv(REMOTE_ADDR); 
}

// tu dato fecha de tu base de datos .. esto es un ejemplo . usa tus $dato_fecha_bd=$row['fecha']; 
setlocale(LC_ALL"sp");
$dato_fecha_bd=strftime("%Y-%d-%m");
$hora=strftime("%X");

//Dia de la semana array 
$dia_semana=Array(1=>"Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo"); 

//Dia mes en castellano. 
$mes_nombres=Array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Nobiembre","Diciembre"); 

// dividir el string por "-" para obtner sus dia,mes,año por separado en un array. 
$parametros=explode("-",$dato_fecha_bd); 

$dia=$parametros[1]; 
$mes=intval($parametros[2]); // Obtener el intero del string "01" por ejemplo 
$year=$parametros[0]; 

$dia_semana_numerico=date('w',$dia); 
// formar la fecha de salida .. Se usa como indice del array $dia_semana el dia de la semana segun orden cronologico. 

$fecha $dia_semana[$dia_semana_numerico].', '.$dia.' de '.$mes_nombres[$mes].' de '.$year' a las '.$hora

$nombre $_POST['nombre'];
$email $_POST['email'];
$telefono $_POST['telefono'];
$mensaje $_POST['mensaje'];

$mailbody="Nombre:\n=================\n$nombre\n\n";
$mailbody.="Email:\n=================\n$email\n\n";
$mailbody.="Telefono:\n=================\n$telefono\n\n";
$mailbody.="Mensaje:\n=================\n$mensaje\n\n";
$mailbody.="Fecha:\n=================\n$fecha\n\n";
$mailbody.="Explorador del Emisor:\n=================\n$HTTP_USER_AGENT\n\n";
$mailbody.="IP del Emisor:\n=================\n$user_ip\n\n";

mail("$youremail""$emailsubject""$mailbody""From: $from_who");  // Enviar el email.

?>
Por ejemplo los caracteres que fallan son los acentos, ....

¿Como puedo solucionar eso de los errores de los caracteres?

Gracias
  #2 (permalink)  
Antiguo 04/05/2006, 07:42
Avatar de ProWebDeveloper  
Fecha de Ingreso: julio-2005
Ubicación: Maracay - Edo. Aragua
Mensajes: 117
Antigüedad: 12 años, 4 meses
Puntos: 1
Posible Solucion...

Hola amigo..

Intentastes hacer un replace de las vocáles con acento?

algo asi?

Código PHP:
<?php
$contenido 
str_replace("á","&aacute;",$contenido);
$contenido str_replace("é","&eacute;",$contenido);
$contenido str_replace("í","&iacute;",$contenido);
$contenido str_replace("ó","&oacute;",$contenido);
$contenido str_replace("ú","&uacute;",$contenido);
$contenido str_replace("Á","&Aacute;",$contenido);
$contenido str_replace("É","&Eacute;",$contenido);
$contenido str_replace("Í","&Iacute;",$contenido);
$contenido str_replace("Ó","&Oacute;",$contenido);
$contenido str_replace("Ú","&Uacute;",$contenido);
?>
y luego envias el correo con el contenido del mismo ya formateado...

Pruebalo y nos dices que tal a ver si es la solución a tu problema..

Saludos...
__________________
ProWebDeveloper

Última edición por ProWebDeveloper; 04/05/2006 a las 08:06
  #3 (permalink)  
Antiguo 04/05/2006, 08:04
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
Haciendo estos cambios un mensaje original:
Cita:
Mensaje de Contacto

Prueba de la ñ de España

Prueba de acentos de Atención o ATENCIÓN
Llega al email de la forma
Cita:
Mensaje de Contacto

Prueba de la �� Espa��r />
Prueba de acentos de Atenci&oacuten o ATENCI&OacuteN
¿Como lo puedo solucionar?

Gracias por su atención.
  #4 (permalink)  
Antiguo 04/05/2006, 08:11
Avatar de ProWebDeveloper  
Fecha de Ingreso: julio-2005
Ubicación: Maracay - Edo. Aragua
Mensajes: 117
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación

Para los acentos utiliza el script que te mande anteriormente pero lo edite porque me di cuenta que tenia un error... me faltaba un ; al final de cada codigo de acento.. utilizalo asi..:

Código PHP:
 <?php
$contenido 
str_replace("á","&aacute;",$contenido);
$contenido str_replace("é","&eacute;",$contenido);
$contenido str_replace("í","&iacute;",$contenido);
$contenido str_replace("ó","&oacute;",$contenido);
$contenido str_replace("ú","&uacute;",$contenido);
$contenido str_replace("Á","&Aacute;",$contenido);
$contenido str_replace("É","&Eacute;",$contenido);
$contenido str_replace("Í","&Iacute;",$contenido);
$contenido str_replace("Ó","&Oacute;",$contenido);
$contenido str_replace("Ú","&Uacute;",$contenido);
?>
y con respecto a la ñ... utiliza lo siguiente...

Código PHP:
<?php
$contenido 
str_replace("ñ","&ntilde;",$contenido);
?>

Pruebalo nuevamente y avisas..

Saludos...
__________________
ProWebDeveloper
  #5 (permalink)  
Antiguo 04/05/2006, 08:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por ProWebDeveloper
Hola amigo..

Intentastes hacer un replace de las vocáles con acento?

algo asi?

Código PHP:
<?php
$contenido 
str_replace("á","&aacute;",$contenido);
$contenido str_replace("é","&eacute;",$contenido);
$contenido str_replace("í","&iacute;",$contenido);
$contenido str_replace("ó","&oacute;",$contenido);
$contenido str_replace("ú","&uacute;",$contenido);
$contenido str_replace("Á","&Aacute;",$contenido);
$contenido str_replace("É","&Eacute;",$contenido);
$contenido str_replace("Í","&Iacute;",$contenido);
$contenido str_replace("Ó","&Oacute;",$contenido);
$contenido str_replace("Ú","&Uacute;",$contenido);
?>
y luego envias el correo con el contenido del mismo ya formateado...

Pruebalo y nos dices que tal a ver si es la solución a tu problema..

Saludos...
En ese caso podría usar simplemente:

htmlentities()
www.php.net/htmlentities()

que hace eso mismo (y más) .. es decir "convierte" a "entidades HTML" ciertos caracteres como esos acentos y demás.

Pero para esto .. el e-mail DEBE ser enviado en HTML .. no en "texto plano" como así lo hace actualmente nuesto amigo.

Revisa esta FAQ para ver como componer el e-mail en HTML:
http://www.forosdelweb.com/showthrea...350#post254350


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 04/05/2006, 08:16
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
Probado el cambio y na

Ahora me sale esto en el email:
Cita:
Mensaje de Contacto

Prueba de la &ntilde; de Espa&ntilde;a

Prueba de acentos de Atenci&oacute;n o ATENCI&Oacute;N
  #7 (permalink)  
Antiguo 04/05/2006, 08:25
Avatar de ProWebDeveloper  
Fecha de Ingreso: julio-2005
Ubicación: Maracay - Edo. Aragua
Mensajes: 117
Antigüedad: 12 años, 4 meses
Puntos: 1
De acuerdo

Oye que raro vale, lo has probado con diferentes gestores de correo?... bien sea via web o desde windows?...

Eso esta bien extraño...

probastes colocandole los headers al mensaje?.. algo asi...

Código PHP:
<?
$headers 
"MIME-Version: 1.0\r\n" ;
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: TuEmpresa <[email protected]>\r\n";
//y colocarlo asi...
mail("$youremail""$emailsubject""$mailbody""$headers");  // Enviar el email.
?>

Prueba nuevamente y avisas..

Saludos...
__________________
ProWebDeveloper
  #8 (permalink)  
Antiguo 04/05/2006, 08:37
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
Probado de esta forma y funciona, pero el inconveniente es que se envia en formato html y no en formato plano.

Yo uso HORDE para leer los correos y si lo pongo de esta forma el mensaje se pone en un mensaje adjunto.

¿Se puede solucionar?
  #9 (permalink)  
Antiguo 04/05/2006, 08:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por yazo
Probado el cambio y na

Ahora me sale esto en el email:
OJO! .. tienes que enviar el e-mail como HTML. Tu no lo envias como HTML (no lo indicas como cabeceras .. los "$header" que puso en el ejemplo ProWebDeveloper)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 04/05/2006, 08:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por yazo
Probado de esta forma y funciona, pero el inconveniente es que se envia en formato html y no en formato plano.

Yo uso HORDE para leer los correos y si lo pongo de esta forma el mensaje se pone en un mensaje adjunto.

¿Se puede solucionar?
Pero .. eso es problema de tu cliente de correo concreto .. Algunos trabajan el e-mail en "partes", una HTML otra Texto plano .. los archivos adjuntos .. La mayoría de clientes de correo NO hacen eso (Outlook, Hotmail, yahoo, gmail .. etc).

Cuando envias "e-mail's" debes conocer como funcionan los "clientes" que lo puedan leer, así sabras como debes generarlos. De hecho no sé si vistes el link que yo dejé .. pero en esa FAQ ahí tienes un excelente artículo (en un link de la FAQ en cuestión) que explica como componer un e-mail HTML y detalles sobre el diseño del mismo y cosas a tener en cuenta de como trabajan los "clientes" de correo más usandos).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 04/05/2006, 11:25
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
No hay ninguna forma de enviar el email en texto plano pero con los caracteres correctos?

Gracias
  #12 (permalink)  
Antiguo 04/05/2006, 11:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por yazo
No hay ninguna forma de enviar el email en texto plano pero con los caracteres correctos?

Gracias
Usa PHP Mailer (ya te lo comenté en otro mensaje).

En principio .. un e-mail se "compone" con ciertas cabeceras que indican "características" de tu e-mail como "codificaciones" .. "partes" .. "charset" .. etc.

Si quieres investigar ese tema . .mira el protocolo SMTP (en sus RFC's correspondientes) .. YO por mi parte no lo conozco ni me apetece mucho verlo. Uso "PHP Mailer" .. por qué -sé- (no sólo lo uso . .he revisado su código para ver como trabaja y ledido su documentación) que se rige por esos standares.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 04/05/2006, 11:44
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 14 años, 7 meses
Puntos: 3
Muchas Gracias Cluster, usaré PHP Mailer y así conseguiré solucionar los errores que tengo con este codigo.

Muchas Gracias
  #14 (permalink)  
Antiguo 04/05/2006, 11:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. me dió por ver el protocolo SMTP? (en su apartado "MIME" o no sé si MIME va antes que SMTP o no tiene que ver aunque se complementan o el huevo fué antes que la gallina xD):

http://www.ietf.org/rfc/rfc2045.txt

La cabecera en cuestión ya la había indicado ProWebDeveloper .. lo que pasa es que el "definió" su e-mail como HTML y tu lo quieres en Texto plano:

Código PHP:
<?
$headers 
"MIME-Version: 1.0\r\n" ;
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: TuEmpresa <[email protected]>\r\n";
//y colocarlo asi...
mail("$youremail""$emailsubject""$mailbody""$headers");  // Enviar el email.
?>
Pero realmente .. a veces es necesario tener "nociones" de como funcionan las cosas OK, pero a la "hora de la verdad" usa algo "práctico" .. Si bien este caso la solución era apenas una línea .. en otros casos ya se complica mucho el tema y sobre todo al "final" llegarías a crear algo de lo que ya hace alguna "classe" como la que te he propuesto: aprende a usarla y nunca más usarás "mail()" de PHP sólo .. por pequeño que sea tu proyecto y .. si este crece ... no tendrás que hacer más que usar otros métodos de esa classe.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 17:15.