Foros del Web » Programando para Internet » PHP »

Problema de caracteres en encabezado e mail enviado con mail()

Estas en el tema de Problema de caracteres en encabezado e mail enviado con mail() en el foro de PHP en Foros del Web. TEngo un problema de codificación de los caracteres en los e-Mails automaticos enviados por un script. me base en varios moldelos tomados de la web ...
  #1 (permalink)  
Antiguo 15/12/2010, 09:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Problema de caracteres en encabezado e mail enviado con mail()

TEngo un problema de codificación de los caracteres en los e-Mails automaticos enviados por un script. me base en varios moldelos tomados de la web oficial de PHP y en modelos de las FAQs de PHP en FDW, por lo que en general todo funciona bien... excepto que no toma como debería las letras acentuadas y cualquier caracter extendido.
El script es este:
Código PHP:
                 // Para enviar un correo HTML mail, -
                 
$xmlDoc simplexml_load_string($mensaje);
                 
$to        "[email protected]";
                 
$subject htmlentities("Pedido de registración No.".$petid.": ".$xmlDoc[0]->empresa);
                 
$message "<head><title>Se ha recibido una petición de registración.</title></head>\n";
                 
$message .= "<body>\n";
                 
$message .= "<p>Empresa: ".$xmlDoc[0]->empresa."<br/>\n";
                 
$message .= "Cantidad de vehiculos: ".$xmlDoc[0]->cantvehiculos."<br/>\n";
                 
$message .= "Responsable de solicitud: ".$xmlDoc[0]->apellido.", ".$xmlDoc[0]->nombre."<br/>\n";
                 
$message .= "Contacto: ".$xmlDoc[0]->email."<br/>\n";
                 
$message .= "Puesto o cargo: ".$xmlDoc[0]->cargo."<br/>\n";
                 
$message .= "Fecha de envío: ".$xmlDoc[0]->fecha."</p></body>\n";
                 
// Cabeceras adicionales
                 
$cabeceras "X-Mailer:PHP/".phpversion()."\n";
                 
$cabeceras .= "MIME-Version: 1.0\r\n";
                 
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";
                 
$cabeceras .= "Reply-To: $to \r\n";
                 
$cabeceras .= "Bcc: [email protected]\r\n";
                 
$cabeceras .= "From:"$xmlDoc[0]->email
Detalles:
1. Los e-Mails llegan perfectamente, por lo que el método es operativo.
2. Los datos provenientes del XML llegan correctamente, excepto si tienen caracteres extendidos, caso en el que llegan con defectos.

¿Qué es lo que debo modificar o agregar para evitar problemas con la collation?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #2 (permalink)  
Antiguo 15/12/2010, 09:28
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema de caracteres en encabezado e mail enviado con mail()

Si no me equivoco, el problema es esta línea :

Código PHP:
Ver original
  1. $cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";

Debería ser :

Código PHP:
Ver original
  1. $cabeceras .= "Content-type: text/html; charset=utf-8\r\n";

También puedes probar usar is-8859-1 como charset, con array_map y utf8_decode, ya que utf8_decode, decodifica los caracteres iso-8859-1 codificados con utf8.

Una pregunta, ya que no sé de XML... ¿puedes especificar el charset del documento xml? Y si es así, ¿cuál le especificaste?
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 15/12/2010, 09:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema de caracteres en encabezado e mail enviado con mail()

Cita:
Una pregunta, ya que no sé de XML... ¿puedes especificar el charset del documento xml? Y si es así, ¿cuál le especificaste?
El documento XML tiene charset UTF-8. Cuando lo uso directametne para almacenar en la base o para devolver da,tos a la aplicación no me trae ningún tipo de problemas de CHARSET. Solamente aparecieron cunado tuve que mandar un e-Mail
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/12/2010, 09:48
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema de caracteres en encabezado e mail enviado con mail()

Entonces, a simple vista (puedo equivocarme) es el charset que especificaste al momento de enviar el correo. Prueba cambiarlo a utf-8.

La otra opción, sería enviar el correo como iso-8859-1, y el mensaje decodificarlo con utf8_decode, para que lo transforme a iso-8859-1.

Prueba esas opciones, y nos avisas.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 16/12/2010, 13:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema de caracteres en encabezado e mail enviado con mail()

Bueh. Finalmente la solución fue la propuesta:
Había que cambiar esto:
Código PHP:
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n"
por esto:
Código PHP:
$cabeceras .= "Content-type: text/html; charset=UTF-8\r\n"
y voilá!, problema resuelto.

Muchas gracias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: caracteres, encabezado, mail
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 03:33.