Foros del Web » Programando para Internet » PHP »

Problema con acentos y ñ en el formulario

Estas en el tema de Problema con acentos y ñ en el formulario en el foro de PHP en Foros del Web. Hola gente, despues de leeros mucho estoy encallado en algo que nso como arreglarlo. He leido sobre el tema pero no soy ningún experto, el ...
  #1 (permalink)  
Antiguo 13/09/2012, 11:54
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Problema con acentos y ñ en el formulario

Hola gente, despues de leeros mucho estoy encallado en algo que nso como arreglarlo.

He leido sobre el tema pero no soy ningún experto, el caso es que al enviar un formulario no me apareen ni las ñ ni los acentos en el correo, lo de

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ya lo tengo puesto y nada, he leido algo de la funcion htmlentities() pero no consigo hacer que fucione, os dejo el código para ver que es lo que hago mal.

Gracias!!

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Documento sin título</title>

</head>



<body><?php

function form_mail($sPara$sAsunto$sTexto$sDe)

{

$bHayFicheros 0;

$sCabeceraTexto "";

$sAdjuntos "";



if (
$sDe)$sCabeceras "From:".$sDe."\n";

else 
$sCabeceras "";

$sCabeceras .= "MIME-version: 1.0\n";

foreach (
$_POST as $sNombre => $sValor)

$sTexto $sTexto."\n".$sNombre." = ".$sValor;



foreach (
$_FILES as $vAdjunto)

{

if (
$bHayFicheros == 0)

{

$bHayFicheros 1;

$sCabeceras .= "Content-type: multipart/mixed;";

$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";



$sCabeceraTexto "----_Separador-de-mensajes_--\n";

$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";

$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";



$sTexto $sCabeceraTexto.$sTexto;

}

if (
$vAdjunto["size"] > 0)

{

$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";

$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;

$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";

$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";



$oFichero fopen($vAdjunto["tmp_name"], 'r');

$sContenido fread($oFicherofilesize($vAdjunto["tmp_name"]));

$sAdjuntos .= chunk_split(base64_encode($sContenido));

fclose($oFichero);

}

}



if (
$bHayFicheros)

$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";

return(
mail($sPara$sAsunto$sTexto$sCabeceras));

}



//Ejemplo de como usar:

if (form_mail("[email protected]","Solicitan informacion",

"Los datos introducidos en el formulario son:\n\n""[email protected]"))

echo 
"Su formulario ha sido enviado con éxito, a la mayor brevedad posible nos pondremos en contacto con usted. Gracias por su confianza";

?> 

</body>

</html>
  #2 (permalink)  
Antiguo 13/09/2012, 12:23
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Problema con acentos y ñ en el formulario

Bueno, si pasas el texto a utf8 pero en el email indicas
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";

¿como que habrá una pequeña incongruencia, o no?
  #3 (permalink)  
Antiguo 13/09/2012, 13:14
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Gracias!! Vale es que tantos cambios le e echo ya que no me había dado cuenta de eso, lo he cambiado pero sigue igual..


alguna sugerencia más???

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Documento sin título</title>

</head>



<body><?php

function form_mail($sPara$sAsunto$sTexto$sDe)

{

$bHayFicheros 0;

$sCabeceraTexto "";

$sAdjuntos "";



if (
$sDe)$sCabeceras "From:".$sDe."\n";

else 
$sCabeceras "";

$sCabeceras .= "MIME-version: 1.0\n";

foreach (
$_POST as $sNombre => $sValor)

$sTexto $sTexto."\n".$sNombre." = ".$sValor;



foreach (
$_FILES as $vAdjunto)

{

if (
$bHayFicheros == 0)

{

$bHayFicheros 1;

$sCabeceras .= "Content-type: multipart/mixed;";

$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";



$sCabeceraTexto "----_Separador-de-mensajes_--\n";

$sCabeceraTexto .= "Content-type: text/plain;charset=utf-8\n";

$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";



$sTexto $sCabeceraTexto.$sTexto;

}

if (
$vAdjunto["size"] > 0)

{

$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";

$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;

$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";

$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";



$oFichero fopen($vAdjunto["tmp_name"], 'r');

$sContenido fread($oFicherofilesize($vAdjunto["tmp_name"]));

$sAdjuntos .= chunk_split(base64_encode($sContenido));

fclose($oFichero);

}

}



if (
$bHayFicheros)

$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";

return(
mail($sPara$sAsunto$sTexto$sCabeceras));

}



//Ejemplo de como usar:

if (form_mail("[email protected]","Solicitan informacion",

"Los datos introducidos en el formulario son:\n\n""[email protected]"))

echo 
"Su formulario ha sido envíado con éxito, a la mayor brevedad posible nos pondremos en contacto con usted. Gracias por su confianza";

?> 

</body>

</html>
  #4 (permalink)  
Antiguo 13/09/2012, 13:23
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Problema con acentos y ñ en el formulario

Al declarar en tu header que tu html tiene el charset utf8, no quiere decir que lo que el usuario introduzca también esté en utf8. Para asegurarlo, pasa las variables que obtienes del formulario a ut8 con utf8_encode()

$sTexto=utf8_encode($sTexto);
  #5 (permalink)  
Antiguo 13/09/2012, 16:27
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Cita:
Iniciado por ocp001a Ver Mensaje
Al declarar en tu header que tu html tiene el charset utf8, no quiere decir que lo que el usuario introduzca también esté en utf8. Para asegurarlo, pasa las variables que obtienes del formulario a ut8 con utf8_encode()

$sTexto=utf8_encode($sTexto);

Gracias pero no me sale, dónde tengo que ponerlo?
  #6 (permalink)  
Antiguo 13/09/2012, 17:04
Avatar de 1333nvz  
Fecha de Ingreso: julio-2012
Mensajes: 20
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

El archivo en sí también tiene que estar codificado bajo utf8, algunos editores cómo Notepad++ traen esta opción en el menú superior.
  #7 (permalink)  
Antiguo 14/09/2012, 01:54
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Cita:
Iniciado por 1333nvz Ver Mensaje
El archivo en sí también tiene que estar codificado bajo utf8, algunos editores cómo Notepad++ traen esta opción en el menú superior.
Si eso si lo he hecho, lo que no me sale es lo de utf8_encode().
  #8 (permalink)  
Antiguo 14/09/2012, 03:06
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Problema con acentos y ñ en el formulario

No te tiene que salir en ningún sitio, tienes que meter el texto en tus variables pasandole eso.

$variable = utf8_encode("cadena de texto en utf8 puedo poner eñes y tó");
  #9 (permalink)  
Antiguo 14/09/2012, 05:04
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Graqcias Alycishape, pero soy muy lerdo en esto y me da error, no se que es lo que hago mal, como he de meter el texto en las variables?

Me estoy haciendo un lio que pa qué.
  #10 (permalink)  
Antiguo 14/09/2012, 09:40
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 18 años
Puntos: 58
Respuesta: Problema con acentos y ñ en el formulario

Código PHP:
Ver original
  1. return(mail($sPara, $sAsunto, utf8_encode($sTexto), $sCabeceras));
  #11 (permalink)  
Antiguo 14/09/2012, 10:20
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Gracias Joss pero nada eso me repite mas caracteres, sin lo que tu me habías puesto me llega así el correo:

eñe y tó = eñe y tó

Con la modificación de Jossss me repite caracteres:

eñe y tó = eñe y tó

Por muchas vueltas que le doy no me lo explico.
  #12 (permalink)  
Antiguo 14/09/2012, 10:39
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 18 años
Puntos: 58
Respuesta: Problema con acentos y ñ en el formulario

Entonces llegan codificados ya al form de envío... debes hacer lo contrario. No me habia fijado que ya tenias la página en utf8 :)
Código PHP:
Ver original
  1. return(mail($sPara, $sAsunto, utf8_decode($sTexto), $sCabeceras));
  #13 (permalink)  
Antiguo 14/09/2012, 10:45
 
Fecha de Ingreso: septiembre-2012
Ubicación: Chihuahua, Mexico
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Problema con acentos y ñ en el formulario

Vale Josssss era eso!!!! Y yo venga a dárle vueltas a ver por que no los codificaba, mil gracias de verdad crack!

Y a los demás también por sus consejos.

Etiquetas: acentos, 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




La zona horaria es GMT -6. Ahora son las 04:58.