Foros del Web » Programando para Internet » PHP »

No se me escriben las tildes ni las eñes al enviar un mail con php

Estas en el tema de No se me escriben las tildes ni las eñes al enviar un mail con php en el foro de PHP en Foros del Web. Hola compañeros, tengo un problema. He diseñado un formulario para enviar un correo. Todo funciona a la perfección excepto que cuando llega el correo, las ...
  #1 (permalink)  
Antiguo 16/04/2007, 03:51
 
Fecha de Ingreso: mayo-2005
Ubicación: Avilés/Asturias
Mensajes: 79
Antigüedad: 19 años
Puntos: 0
No se me escriben las tildes ni las eñes al enviar un mail con php

Hola compañeros, tengo un problema. He diseñado un formulario para enviar un correo. Todo funciona a la perfección excepto que cuando llega el correo, las eñes y acentos son sustituidos por caracteres extraños.

Por lo que veo por ahí, algunos dicen que la solución es utilizar la función htmlentities, pero ¿eso no funciona sólamente si el mail se envía como html?

Es decir, yo quiero enviar el correo como texto, pero no me salen acentos ni eñes. La única alternativa es mandarlo como html e introducir la función htmlentities???

Os pongo el código:
Código PHP:
$nombre $_POST['nombre'];
$mail $_POST['mail'];
$empresa $_POST['empresa'];

$header 'From: ' $mail " \r\n";
$header .= "X-Mailer: PHP/" phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje "Este mensaje fue enviado por " $nombre ", de la empresa " $empresa " \r\n";
$mensaje .= "Su e-mail es: " $mail " \r\n";
$mensaje .= "Mensaje: \r\n" $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " date('d/m/Y'time());

$para '[email protected]';
$asunto 'Contacto desde la web';

$x mail($para$asuntoutf8_decode($mensaje), $header);

if(
$x){
    echo 
"<p>Mensaje enviado correctamente</p>";
}else{
    echo 
"<p>Se ha producido un error que ha impedido enviar el correo.</p>";

Para que me escriba los acentos tengo que poner el siguiente código:
Código PHP:
//en vez de $header .= "Content-Type: text/plain";
$header .= "Content-Type: text/html; charset=ISO-8859-1";

//en vez de $mensaje .= "Mensaje: \r\n" . $_POST['mensaje'] . " \r\n";
$mensaje .= "Mensaje: \r\n" .htmlentities$_POST['mensaje'] ). " \r\n"
El problema de hacer esto es que me escribe todo el mensaje en una linea (eso sí, con acentos y eñes) y entonces en vez de \r\n tendría que escribir <br />.

MI PREGUNTA:
1.- ¿Lo envío como html (y sustituyo los \n\r por <br />)? ¿Qué ventajas y desventajas hay frente a enviarlo como texto plano?
2.- ¿ O lo envío como texto plano? Entonces ¿de qué manera puedo hacer que se escriban los acentos y las eñes?

Muchas gracias a todos y todas
__________________
Si no hubiera Sol sería de noche . Heráclito de Éfeso :si:
  #2 (permalink)  
Antiguo 20/07/2007, 21:50
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: No se me escriben las tildes ni las eñes al enviar un mail con php

Intentar esto:
Código PHP:
$header .= "Content-Type: text/plain; charset=ISO-8859-1"
* La ventaja de usar HTML en el envío de tus correos es la presentación.
* La ventaja de usar Texto plano en tus correos es que es más posible que aún en clientes de correo basados en texto se puedan ver correctamente.

Suerte
  #3 (permalink)  
Antiguo 21/07/2007, 00:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 4
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: No se me escriben las tildes ni las eñes al enviar un mail con php

Y si en lugar de poner:

Código PHP:
$header .= "Content-Type: text/html; charset=ISO-8859-1"
pones:

Código PHP:
$header .= "Content-Type: text/html; charset=UTF-8"
y sacas la función "utf8_decode()":

Código PHP:
$x mail($para$asunto$mensaje$header); 
Así mandas todo en utf-8 :)

Última edición por Julio Viana; 21/07/2007 a las 00:12 Razón: Soy un pete
  #4 (permalink)  
Antiguo 21/07/2007, 01:10
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: No se me escriben las tildes ni las eñes al enviar un mail con php

Julio Viana, lo que comentas sería para mandar el correo en HTML con utf 8 ... ésa parte creo que la tiene cubierta (en html sí le muestra acentos y eñes) ...

Sin embargo, es buena sugerencia lo de cambiar el charset=ISO-8859-1 por charset=UTF-8 ... es más estándar.

Siendo así Deiviz podrías usar para texto plano:
Código PHP:
$header .= "Content-Type: text/plain; charset=UTF-8"
ó bien para HTML:
Código PHP:
$header .= "Content-Type: text/html; charset=UTF-8"
Buena sugerencia lo del UTF-8 Julio
Saludos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 15:41.