Comunidad Macuarium: No se escriben los acentos ni las eñes al enviar un correo con PHP y l - Comunidad Macuarium

Ir a contenido

Página 1 de 1
  • No puedes empezar un nuevo tema
  • No puedes responder a este tema

Options
No se escriben los acentos ni las eñes al enviar un correo con PHP y l

#1 Usuario offline   Deiviz 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 212
  • Registrado: 20-September 05

Publicado 16 April 2007 - 11:10 AM

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:
$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 = 'usuario@gmail.com';
$asunto = 'Contacto desde la web';

$x = mail($para, $asunto, utf8_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:

//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"

iBook G3 600mhz
HD:40 GB
348 mb sdram
OS X 10.3.9

iMac27 Core 2 Duo Intel a 3,06 GHz
HD: 1TB
4 Gibas de ram

...y a volar!!

#2 Usuario offline   kiltro 

  • Usuario Activo
  • PipPipPip
  • Buscar Temas
  • Grupo: Usuarios Activos
  • Mensajes: 251
  • Registrado: 04-April 06

Publicado 29 October 2007 - 06:43 PM

Tengo exactamente el mismo problema.

#3 Usuario offline   frjgs 

  • Usuario
  • Pip
  • Buscar Temas
  • Grupo: Usuarios
  • Mensajes: 6
  • Registrado: 05-February 02

Publicado 30 October 2007 - 01:21 AM

Estoy aprendiendo la programación en PHP no sé si te puedo ayudar. Últimamente todo lo que realizo a través de web lo hago con configuración uft-8. mira a ver si es eso.

Saludos

Compartir este tema:


Página 1 de 1
  • No puedes empezar un nuevo tema
  • No puedes responder a este tema