Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con envío de caracteres especiales desde un formulario HTML y PHP

Estas en el tema de Problema con envío de caracteres especiales desde un formulario HTML y PHP en el foro de PHP en Foros del Web. Hola, he buscado en las FAQS antes de postear y como no lo encontré les pido ayuda a Ustedes. Recién estoy comenzando a hacer algunas ...
  #1 (permalink)  
Antiguo 15/07/2012, 18:39
 
Fecha de Ingreso: julio-2012
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 6 años, 4 meses
Puntos: 1
Problema con envío de caracteres especiales desde un formulario HTML y PHP

Hola, he buscado en las FAQS antes de postear y como no lo encontré les pido ayuda a Ustedes. Recién estoy comenzando a hacer algunas páginas, el tema es que me pidieron una con un formulario y lo fui haciendo en base a lo que leí en distintas páginas.

El problema es el siguiente:
Tengo el formulario hecho en HTML y un archivo en PHP para enviar la data, el tema es que el texto que carga el visitante dentro de la “caja de texto” cuando es enviado al correo aparece con caracteres raros sin respetar acentos ni ñ.
Copio el código para que puedan ver que es lo que me falta o está mal.

EN EL HTML

<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="left"><form name="escribime" method="POST" action="enviar.php">
<label> Nombre y Apellido<br><input name="nombre" type="text" id="nombre" value="ingrese su nombre completo" size="30" maxlength="40" style="font-family: Arial; font-size: 10pt; color: #999999" onClick="javascript: limpia(this);" onBlur="javascript: verifica(this);"></label>
<br>
<br>
<label> Teléfono<br><input name="telefono" type="text" id="telefono" size="30" maxlength="12" value="no deje espacios en blanco" style="font-family: Arial; font-size: 10pt; color: #999999" onClick="javascript: limpi(this);" onBlur="javascript: verific(this);"></label>
<br>
<br>
<label> Dirección de email<br> <input name="email" type="text" id="email" size="30" maxlength="43" value="ingrese su email" style="font-family: Arial; font-size: 10pt; color: #999999" onClick="javascript: limp(this);" onBlur="javascript: verifi(this);"></label>
<br>
<br>
<label> Consulta<br><textarea name="consulta" id="consulta" cols="40" rows="8" style="font-family: Arial; font-size: 10pt; color: #999999"></textarea></label>
<br>
<br>
<label> enviar formulario <input type="submit" name="enviar" id="enviar" value="Enviar"></label>
</form></td>
</tr>
</table>


EN EL PHP

<?php
$nombre = $_POST['nombre'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$thank="volver.html";

$header = 'From: ' . $nombre . " \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 . ",
con teléfono número " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $email . " \r\n";
$mensaje .= "Consulta: " . $_POST['consulta'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'contacto desde la página web';

mail($para, utf8_decode($asunto), utf8_decode($mensaje), $header);
echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL='.$thank.'">';
?>



si en el formulario completo con lo siguiente:

Nombre: José Pérez
Teléfono: 0123456789
Email: [email protected]
Consulta: aún no sé como se hace



llega de la siguiente manera:

CABECERA DEL EMAIL

De: José Pérez (bien)
Asunto: contacto desde página web (bien)


EN EL CUERPO DEL EMAIL
Este mensaje fue enviado por Jos??z, (MAL)
con teléfono número 0123456789 (bien)
Su e-mail es: [email protected] (bien)
Consulta: a?os?ue pasa (MAL)
Enviado el 15/07/2012 (bien)

desde ya muchas gracias.
José
  #2 (permalink)  
Antiguo 15/07/2012, 18:49
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 6 años, 5 meses
Puntos: 20
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

Eso es porque las web usan el juego de caracteres UTF-8 y este no soporta acentos ni Ñ.

Tenes que usar utf8_encode() cuando recuperas el contenido de los input text
Ej:
Código PHP:
Ver original
  1. $nombre = utf8_encode($_POST['nombre']);

SI en cambio, tuvieras una web tuya con ese problema, tenes que cambiar el juego de caracteres que usas.
Y para que muestre directamente acentos y ñ tenes que usar ISO-8859-1

En el head de la web
Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

En vez de UTF-8
Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Pero como vos envías los datos por email y las web de clientes mails están en UTF-8, la solución es codificarlos.

La funcion utf8_encode() transforma:

árbol -> &aacute;rbol
ñandú -> &ntilde;and&uacute;
  #3 (permalink)  
Antiguo 15/07/2012, 21:09
 
Fecha de Ingreso: julio-2012
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 6 años, 4 meses
Puntos: 1
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

Cita:
Iniciado por topo_bionico Ver Mensaje
Eso es porque las web usan el juego de caracteres UTF-8 y este no soporta acentos ni Ñ.

Tenes que usar utf8_encode() cuando recuperas el contenido de los input text
Ej:
Código PHP:
Ver original
  1. $nombre = utf8_encode($_POST['nombre']);

SI en cambio, tuvieras una web tuya con ese problema, tenes que cambiar el juego de caracteres que usas.
Y para que muestre directamente acentos y ñ tenes que usar ISO-8859-1

En el head de la web
Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

En vez de UTF-8
Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Pero como vos envías los datos por email y las web de clientes mails están en UTF-8, la solución es codificarlos.

La funcion utf8_encode() transforma:

árbol -> &aacute;rbol
ñandú -> &ntilde;and&uacute;
Hola topo_bionico, te agradezco por tu tiempo en leer mi problema y en responderme.

Voy a probar lo que me dices de poner $nombre = utf8_encode($_POST['nombre']); en vez de lo que tengo ahora que es $nombre = $_POST['nombre'];

lo probaré y te comento. GRACIAS!
  #4 (permalink)  
Antiguo 15/07/2012, 21:30
 
Fecha de Ingreso: julio-2012
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 6 años, 4 meses
Puntos: 1
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

No, no funcionó, es más el nombre que antes llegaba bien ahora no; por lo que volví a dejarlo como lo tenía.

en si con el que tengo problemas es con esta línea

$mensaje .= "Consulta: " . $_POST['consulta'] . " \r\n";

que es la que toma la consulta desde una caja de texto en el formulario.

De no poder solucionarse, hay forma de quitar todos los acentos que la gente ingrese?
  #5 (permalink)  
Antiguo 15/07/2012, 21:53
Avatar de topo_bionico  
Fecha de Ingreso: junio-2012
Mensajes: 89
Antigüedad: 6 años, 5 meses
Puntos: 20
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

Cita:
Iniciado por deqmte Ver Mensaje
No, no funcionó, es más el nombre que antes llegaba bien ahora no; por lo que volví a dejarlo como lo tenía.

en si con el que tengo problemas es con esta línea

$mensaje .= "Consulta: " . $_POST['consulta'] . " \r\n";

que es la que toma la consulta desde una caja de texto en el formulario.

De no poder solucionarse, hay forma de quitar todos los acentos que la gente ingrese?
Hace utf8_encode($_POST['consulta'])

Y que es "llegan mal" ?

Otra cosa que podes revisar es los nombres, Consulta no es lo mismo que consulta o que CONSULTA, son 3 variables distintas.
  #6 (permalink)  
Antiguo 16/07/2012, 00:00
 
Fecha de Ingreso: julio-2012
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 6 años, 4 meses
Puntos: 1
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

Topo_bionico, gracias por tu ayuda y tu tiempo.

Posteo la solución por si alguien se topa con el mismo problema.

El error estaba en un $header

el header correcto es este:

$header .= "Content-type: text/html; charset=iso-8859-1 \r\n";
  #7 (permalink)  
Antiguo 19/06/2014, 17:41
 
Fecha de Ingreso: junio-2014
Mensajes: 4
Antigüedad: 4 años, 5 meses
Puntos: 0
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

Hola a todos.

Esta es la primera vez que escribo en estos foros, de hecho me acabo de registrar hace unos segundos y solo para comentar (aparte de empezar a ayudar, ya que me han ayudado durante ya algún tiempo y nunca me había registrado) sobre un pequeño error, o al menos ami me funciono un poco distinto.

Es correcta la forma que inca topo_bionico solo que en lugar de poner:

utf8_encode($_POST['consulta'])

Se pone:

utf8_decode($_POST['consulta'])

Ya se que se ha resuelto el problema con otras soluciones, solo quise poner esto por si a alguien mas le pueda servir, como me sirvió a mi. Gracias!
  #8 (permalink)  
Antiguo 20/06/2014, 08:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 11 años, 8 meses
Puntos: 290
Respuesta: Problema con envío de caracteres especiales desde un formulario HTML y PHP

@Esar : estas respondiendo a un mensaje de 2012

Bienvenido!
__________________
Salu2!

Etiquetas: caracteres, especiales, formulario, html
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:16.