Problema de codificación con HTML y PHP
Publicado por Beldar (1 intervención) el 28/08/2007 17:38:58
Tengo una base de datos montada en PostgreSQL versión 8.1 que trabaja bajo el S.O. GNU/Linux Debian etch
Además tengo un servidor Apache 2.0 montado en la misma máquina.
La versión de PHP que utilizo es la 5.0
He desarrollado una aplicación en PHP que es capaz de leer datos de las tablas, insertar registros y modificar los campos.
Hasta hay todo correcto.
Ahora viene el problema.
El programa en php me envía por correo los cambios que se han realizado en la tablas.
En el navegador web (Internet Explorer o Mozilla, da lo mismo) puedo visualizar el contenido de los campos (que son de tipo texto) sin problemas.
Si abro el contenido de las tablas desde la aplicación pgAdmin III o desde la consola con pgsql veo el contenido codificado correctamente, veo acentos, eñes, etc. igual que en el navegador web.
Pero si abro el correo que se me envía desde PHP lo veo todo mal codificado, se sustituyen los acentos y demás caracteres especiales por símbolos raros. El mensaje se envía en formato HTML.
Da igual si cargo los datos desde un equipo Windows que desde Linux.
Da igual si abro el correo desde Outlook que desde Evolution o Thunderbird.
Les dejo el código que utilizo para enviar los correos. Elimino las direcciones de correo reales para evitar el SPAM
//enviamos la incidencia por correo
//Creamos el asunto del correo
$asunto = "CARGADA Incidencia ".$num;
//seleccionamos la dirección de correo del destinatario desde la tabla de usuarios
$email= "SELECT email from empleados where usuario='".$user."';";
$consult = pg_exec($connection, $email);
for ($lt = 0; $lt < pg_numrows($consult); $lt++)
{
$destinatario = pg_result($consult, $lt, 6);
}
//para el envío en formato HTML
//se supone que esto debe resolver los problemas de codificación.
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cuerpo = "
<div align=center>
<font size=6px color=#0000FF>
<b>
INCIDENCIA </font><font size=6px color=#FF0000>". $num ." </font><font size=6px color=#0000FF>CARGADA CORRECTAMENTE!!"."
</b>
</font>
</div>
<br>
<br>
<table border=1 align=center bgcolor=#CCFFCC>
<tr>
<td>
<font size=3px color=#330099>
<b>
N° INCIDENCIA
</b>
</font>
</td>
<td>
<font size=3px color=#FF0000>
<b>
". $num ."
</b>
</font>
</td>
<td>
<font size=3px color=#330099>
<b>
USUARIO
</b>
</font>
</td>
<td>
". $user ."
</td>
<td>
<font size=3px color=#330099>
<b>
DEPARTAMENTO
</b>
</font>
</td>
<td>
". $dep ."
</td>
</tr>
<tr>
<td>
<font size=3px color=#330099>
<b>
DESCRIPCIÓN
</b>
</font>
</td>
<td colspan=5>
". $desc ."
</td>
</tr>
<tr>
<td valign=top>
<font size=3px color=#330099>
<b>
INCIDENCIA
</b>
</font>
</td>
<td colspan=5 height=145 valign=top>
". $incidencia ."
</td>
</tr>
<tr>
<td>
<font size=3px color=#330099>
<b>
PRIORIDAD
</b>
</font>
</td>
<td>
". $prioridad ."
</td>
<td>
<font size=3px color=#330099>
<b>
ESTADO
</b>
</font>
</td>
<td>
". $estado ."
</td>
</tr>
</table>
<br>
";
//dirección del remitente
$headers .= "From: Servidor de Incidencias <[email protected]>\r\n";
//dirección de respuesta, si queremos que sea distinta que la del remitente
$headers .= "Reply-To: [email protected]\r\n";
//ruta del mensaje desde origen a destino
$headers .= "Return-path: [email protected]\r\n";
//direcciones que recibián copia
$headers .= "Cc: [email protected]\r\n";
//direcciones que recibirán copia oculta
//$headers .= "Bcc: [email protected],[email protected]\r\n";
//echo $user;
//echo "<br>";
//echo $mail;
mail($mail,$asunto,$cuerpo,$headers);
Gracias a todos por su ayuda.
Además tengo un servidor Apache 2.0 montado en la misma máquina.
La versión de PHP que utilizo es la 5.0
He desarrollado una aplicación en PHP que es capaz de leer datos de las tablas, insertar registros y modificar los campos.
Hasta hay todo correcto.
Ahora viene el problema.
El programa en php me envía por correo los cambios que se han realizado en la tablas.
En el navegador web (Internet Explorer o Mozilla, da lo mismo) puedo visualizar el contenido de los campos (que son de tipo texto) sin problemas.
Si abro el contenido de las tablas desde la aplicación pgAdmin III o desde la consola con pgsql veo el contenido codificado correctamente, veo acentos, eñes, etc. igual que en el navegador web.
Pero si abro el correo que se me envía desde PHP lo veo todo mal codificado, se sustituyen los acentos y demás caracteres especiales por símbolos raros. El mensaje se envía en formato HTML.
Da igual si cargo los datos desde un equipo Windows que desde Linux.
Da igual si abro el correo desde Outlook que desde Evolution o Thunderbird.
Les dejo el código que utilizo para enviar los correos. Elimino las direcciones de correo reales para evitar el SPAM
//enviamos la incidencia por correo
//Creamos el asunto del correo
$asunto = "CARGADA Incidencia ".$num;
//seleccionamos la dirección de correo del destinatario desde la tabla de usuarios
$email= "SELECT email from empleados where usuario='".$user."';";
$consult = pg_exec($connection, $email);
for ($lt = 0; $lt < pg_numrows($consult); $lt++)
{
$destinatario = pg_result($consult, $lt, 6);
}
//para el envío en formato HTML
//se supone que esto debe resolver los problemas de codificación.
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cuerpo = "
<div align=center>
<font size=6px color=#0000FF>
<b>
INCIDENCIA </font><font size=6px color=#FF0000>". $num ." </font><font size=6px color=#0000FF>CARGADA CORRECTAMENTE!!"."
</b>
</font>
</div>
<br>
<br>
<table border=1 align=center bgcolor=#CCFFCC>
<tr>
<td>
<font size=3px color=#330099>
<b>
N° INCIDENCIA
</b>
</font>
</td>
<td>
<font size=3px color=#FF0000>
<b>
". $num ."
</b>
</font>
</td>
<td>
<font size=3px color=#330099>
<b>
USUARIO
</b>
</font>
</td>
<td>
". $user ."
</td>
<td>
<font size=3px color=#330099>
<b>
DEPARTAMENTO
</b>
</font>
</td>
<td>
". $dep ."
</td>
</tr>
<tr>
<td>
<font size=3px color=#330099>
<b>
DESCRIPCIÓN
</b>
</font>
</td>
<td colspan=5>
". $desc ."
</td>
</tr>
<tr>
<td valign=top>
<font size=3px color=#330099>
<b>
INCIDENCIA
</b>
</font>
</td>
<td colspan=5 height=145 valign=top>
". $incidencia ."
</td>
</tr>
<tr>
<td>
<font size=3px color=#330099>
<b>
PRIORIDAD
</b>
</font>
</td>
<td>
". $prioridad ."
</td>
<td>
<font size=3px color=#330099>
<b>
ESTADO
</b>
</font>
</td>
<td>
". $estado ."
</td>
</tr>
</table>
<br>
";
//dirección del remitente
$headers .= "From: Servidor de Incidencias <[email protected]>\r\n";
//dirección de respuesta, si queremos que sea distinta que la del remitente
$headers .= "Reply-To: [email protected]\r\n";
//ruta del mensaje desde origen a destino
$headers .= "Return-path: [email protected]\r\n";
//direcciones que recibián copia
$headers .= "Cc: [email protected]\r\n";
//direcciones que recibirán copia oculta
//$headers .= "Bcc: [email protected],[email protected]\r\n";
//echo $user;
//echo "<br>";
//echo $mail;
mail($mail,$asunto,$cuerpo,$headers);
Gracias a todos por su ayuda.
Valora esta pregunta


0