Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] He probado todo lo que he leído y NO logro que se muestren tildes con UTF-8!

Estas en el tema de He probado todo lo que he leído y NO logro que se muestren tildes con UTF-8! en el foro de PHP en Foros del Web. Al grano. Tengo una página que envía un mensaje al email que se ponga en el formulario. He probado la página con mis cuentas de ...
  #1 (permalink)  
Antiguo 15/11/2013, 14:08
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa He probado todo lo que he leído y NO logro que se muestren tildes con UTF-8!

Al grano.

Tengo una página que envía un mensaje al email que se ponga en el formulario. He probado la página con mis cuentas de correo de Hotmail y Gmail. Con la cuenta de Gmail todo funciona bien: el mensaje se muestra en pantalla con acentos. La frase: "Qué es la personología" se muestra tal cual la escribo aquí. Pero con la cuenta de Hotmail el mensaje muestra: "Qué es la personologÃ*a".

He googleado incansablemente en busca de solución y no puedo lograr que el mensaje se muestre correctamente en Hotmail.

He probado:

1. Declarar esto en el HEAD: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2. Declarar esto en el HEAD <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
3. O si es un archivo PHP que sólo contiene PHP, sin las cabeceras, las primeras 3 líneas son:
Código PHP:
Ver original
  1. <?php
  2. header("Content-Type: text/html;charset=utf-8"); // He probado sólo con esta línea sin la de abajo
  3. ini_set('default_charset','utf-8'); // He probado sólo con esta línea sin la de arriba
  4. ...                                                // y he probado poniendo al mismo tiempo las dos líneas de arriba
  5. ?>
4. He guardado el código PHP en el Bloc de Notas con la codificación UTF8 y también con UNICODE... y nada. Leí también que el Bloc de Notas puede guardar con y sin BOM. Tengo el Win7 y el Bloc que trae no tiene estas opciones, sólo: ANSI, UNICODE, UTF-8 y UNICODE big endian. Lo logré guardar con BOM en Dreamweaver, pero no solucionó nada.



Podrían aportar alguna otra posible solución?
Se me ocurrió generar algún código PHP que reemplace todas las letras acentuadas que el usuario introduzca en el formulario, por sus correspondientes ASCII. Igual y eso funciona. Pero creo que NO debería recurrir a eso, si para eso están las CharSets.

Saludos.

Última edición por berkeleyPunk; 15/11/2013 a las 14:15
  #2 (permalink)  
Antiguo 15/11/2013, 17:17
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

¿podrías compartir el código con el que envías los email? ¿Tienes un Content-type dentro de los header del mensaje?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 15/11/2013, 18:00
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Cita:
Iniciado por andresdzphp Ver Mensaje
¿podrías compartir el código con el que envías los email? ¿Tienes un Content-type dentro de los header del mensaje?

Gracias por responder maestro andresdzphp. La respuesta a tu pregunta es: sí. Mis archivos HTML y PHP llevan todas las cabeceras. Utilizo Dreamweaver como editor de código y Dreamweaver, como sabes, se encarga de ponerlas automáticamente.

Por otro lado, ya solucioné mi problema. No era lo que yo buscaba, pero funciona y funciona bien.

Yo buscaba que los benditos acentos se mostraran arreglando cualquier problema que hubiera con la tabla de caracteres, las charsets que se ponen en el head. Yo tenía toda la intención de manosear esa parte del código, pero googleando vi que hay una incansable discusión sobre el tema y las posibles soluciones que ofrecen no arreglan el problema, al menos a mí, no. Sin embargo encontré que existen las funciones utf8_encode y utf8_decode que, según leí, tienen estás funciones:
Encode convierte una cadena según la charset UTF-8, la cual contiene letras acentuadas, o sea, Encode pone acentos.
Decode convierte una cadena en sus caracteres ISO-8859-1. Si la cadena contiene letras acentuadas, por tanto, en pantalla aparece el rombo negro con el signo de interrogación dentro.

Apliqué a una de mis variables el Encode, y resultó que no puso el acento. Probé, por si acaso, el Decode, y puso las letras acentuadas correctamente.

Saludos cordiales, y hasta luego.

Última edición por berkeleyPunk; 15/11/2013 a las 18:07
  #4 (permalink)  
Antiguo 15/11/2013, 18:16
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Me gustaría ver ese código, insisto:

¿Tienes un Content-type dentro de los headers del email? Por ejemplo:

Código PHP:
Ver original
  1. // Para enviar un correo HTML mail, la cabecera Content-type debe fijarse
  2. $cabeceras  = 'MIME-Version: 1.0' . "\r\n";
  3. $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  4.  
  5. // Cabeceras adicionales
  6. $cabeceras .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
  7. $cabeceras .= 'From: Recordatorio <[email protected]>' . "\r\n";
  8. $cabeceras .= 'Cc: [email protected]' . "\r\n";
  9. $cabeceras .= 'Bcc: [email protected]' . "\r\n";
  10.  
  11. // Mail it
  12. mail($para, $titulo, $mensaje, $cabeceras);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 15/11/2013, 19:06
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Cita:
Iniciado por andresdzphp Ver Mensaje
Me gustaría ver ese código, insisto:

¿Tienes un Content-type dentro de los headers del email?...
Uh, caray! Pues entonces la respuesta a tu pregunta es: no.

Explico.
Yo, en mi ingenuidad todavía, entiendo lo siguiente. Si envío un mensaje a la bandeja de entrada de una cuenta de correo, ese mensaje se abrirá dentro de un documento HTML, PHP, ASPX o lo que sea (creado por Google si es Gmail, o Microsoft si es Hotmail, etc), que, imagino, contiene ya una etiqueta <html>, una etiqueta <head> y el resto (¿o existen páginas web que prescindan absolutamente de esas etiquetas -creo que ni siquiera un CMS como Joomla, que arma una página web sin documentos HTML visibles, prescinde de dichas etiquetas: ya hice la prueba poniendo esas etiquetas a un artículo y se desordena todo, esto pasa, imagino, porque en el fondo ya existe una etiqueta html, head, etc).

Ahora, entiendo que si pongo un Content-type dentro de una etiqueta head al archivo PHP que contiene el mensaje a enviar, entonces tengo que poner las etiquetas html, head, etc. Y si las pongo, todo ese documento PHP quizá tenga alguna dificultad (visible/invisible) para mostrarse en la bandeja de entrada del correo del destinatario (bandeja que, como ya expresé, yo creo que cuenta ya con dichas etiquetas).

De ahí que el archivo PHP que contiene el mensaje no cuente con nada más que esto:
Código PHP:
<?php
$instrucciones 
.= '<table style=" background-color:lightgray;">';
$instrucciones .= '  <tr>';
$instrucciones .= '    <td style="color:firebrick; font-size:40px; text-align:left; min-width:700px; max-width:700px;">';
$instrucciones .= '      Qué es la personología';
...
...
... 
// más y más tablas...
?>
Lo que sí probé, fue poner, inmediatamente abajo de <?php, esto:

Código PHP:
header("Content-Type: text/html;charset=utf-8");
ini_set('default_charset','utf-8'); 
Lo cual equivale, creo, al Content-type que se pone dentro de la etiqueta head. Pero no me funcionó, como ya había comentado.

Sé que bombardearás todo lo que he dicho y que mostrarás probablemente muchos errores. Ojala lo hagas, así aprendemos.


PD. Envío el mensaje con ayuda de PHPmailer. Pero según el código que has mostrado para poner en las cabeceras el Content-Type, debo buscar si PHPmailer cuenta con la función para declarar ahí el charset. Igual y con eso se soluciona el problema.

Saludos!

Última edición por berkeleyPunk; 15/11/2013 a las 19:22
  #6 (permalink)  
Antiguo 15/11/2013, 20:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Cita:
Iniciado por berkeleyPunk Ver Mensaje
debo buscar si PHPmailer cuenta con la función para declarar ahí el charset...
Si cuenta con eso, prueba:

Código PHP:
Ver original
  1. $tu_obj->CharSet = 'UTF-8';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 15/11/2013, 23:12
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

prueba esto

Código HTML:
Ver original
  1. <form  method="POST" action="" accept-charset="ISO-8859-1">

agrega esto accept-charset="ISO-8859-1" dentro de tu form ok eso tendra que componerlo ya veras que si si te ayude sumame mi puntillo ajaja
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #8 (permalink)  
Antiguo 16/11/2013, 09:01
Avatar de CrepitantE  
Fecha de Ingreso: octubre-2006
Ubicación: Colombia
Mensajes: 421
Antigüedad: 17 años, 6 meses
Puntos: 7
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Si tienes una base de datos no olvides declararle para colocarla en utf-8. Porque si llegas a colocarla en codigo ANSI, sería mucho más dificil la conversion. Aunque si mal no estoy desde mysql 4 viene por defecto para utf-8.
__________________
-
  #9 (permalink)  
Antiguo 16/11/2013, 10:20
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

berkeleyPunk, intenta de esta forma a ver: http://www.forosdelweb.com/f91/porqu...7/#post4526766
  #10 (permalink)  
Antiguo 16/11/2013, 15:40
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: He probado todo lo que he leído y NO logro que se muestren tildes con UTF-

Cita:
Iniciado por andresdzphp Ver Mensaje
Si cuenta con eso, prueba:
Código PHP:
Ver original
  1. $tu_obj->CharSet = 'UTF-8';
Estaba a punto de ya no probar esta posible solución que muestras, maestro andresdzphp, pues ya había encontrado la solución con la utf8_decode($miVariable). ¿Para qué moverle si ya me funcionaba? Pero lo hice. Resulta que sí se puede declarar la charset en PHPmailer:
Código PHP:
$mail->CharSet ='UTF-8'
Ahora se muestran correctamente los mensajes en el buzón de entrada, y sin necesidad de convertir el contenido de mis variables con utf8_decode() o utf8_encode(). Más todavía, sin necesidad de reemplazar en el texto estático del mensaje las vocales acentuadas y eñes por &aacute, &eacute, &ntilde...

Gracias andresdzphp.

Con respecto a la propuesta de herzbazi, lamentablemente no me ayudaría mucho. Pues los datos del formulario los utilizo sólo para personalizar el mensaje. Así que el grueso del mail quedaría igual. Gracias, de todas formas.

En lo que respecta a CrepitantE, sí, sí tengo una base de datos, y la he codificado en phpMyAdmin con UTF8_General_CI (creo que así se escribe). Y, hasta ahora, no he tenido problema con que la BD guarde los datos con acentos.

Y, por último, acerca de la posible solución del maestro metacortex, ya había probado esa propuesta. Hice un copy-paste del código del archivo PHP (creado con Dreamweaver) en el Bloc de Notas de Win7. Y, como lo dije anteriormente, lo guardé como UTF-8 y UNICODE sin ver ningún resultado. De todas formas, gracias.

Saludos. Y hasta luego (porque siempre regreso).

Etiquetas: 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 12:07.