Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 17 Mayo 2011, 18:19 pm



Título: [utf-8] conflicto con manejo de caracteres !
Publicado por: Diabliyo en 17 Mayo 2011, 18:19 pm
Buen dia.

Tengo un sistema de correos que me permite enviar publicidad a mis clientes, pero tengo un problema algo raro que ya me tiene muy desesperado !...

Estando en mi plataforma web, doy click sobre un botón que instituí para hacerme un envío de prueba a mi correo y ver "como se supone les llegara a los demás antes de procesar envíos", y como método de prueba cree una campa~a con el asunto: "Curso Virtual de computación", tomando en cuenta que la palabra "computación" esta acentuada. Al dar click en TEST, me llega el corre a mi bandeja y veo que el ASUNTO llega con la palabra acentuada (computacion), vaya TODO MUY BIEN.

Así que, ahora hago un "segundo test", pero ahora utilizando cron en mi servidor dedicado, ya que cada vez que creo una campa~a espero a que cron haga los envios cada madrugada (esa es la idea de automatizar). Pero bueno.... Me voy a la shell y escribo:

Código:
shell# curl -u usuario:clave miscript.php?id=test

Y ahora veo mi buzón de correo y noto que ahora en el asunto la palabra "computacion" no llgo acentuada :(.... Sino que llego asi:

Código:
Curso Virtual de computación



Haciendo pruebas locales genere el sigueinte script local y lo corri en mi Apache Server:

http://localhost/test.php
Código:
<?php
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
$texto= 'Curso Virtual de computaci&Atilde;&sup3;n';

echo '<b>limpio</b><br>'. $texto;
echo '<p><b>con decode</b><br>'. html_entity_decode( $texto, ENT_QUOTES );
?>

Al correr el script veo en limpio sale tal cual me llega al mail, y con decode me sale como "debería salirme en el buzón" (respetando las acentuaciones).



Ya verifique el charset default del httpd.conf y esta en UTF-8, ademas en miscript.php del cron tengo especificado el charset UTF-8.




--- ACTUALIZACION ---
Tengo que pasarle dos veces el html_entity_decode() al texto, cuando se esta ejecutando el test via CRON, para que pueda llegar la palabra acentuada. Pero, se me hace muy raro, ya que via web solo se le pasa una sola vez el html_entity_decode() y llega acentuada la palabra al mail.

Alguien sabe porque esto ?


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: [u]nsigned en 17 Mayo 2011, 18:26 pm
Lo idal seria que en lugar de recurir a la codificacion, especifiques los caracteres no asci por su codigo, por ejemplo la o tildada (ó) es &oacute;

Proba con eso...

Saludos


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: merolhack en 17 Mayo 2011, 18:28 pm
Yo envío los correos sin ponerles los códigos de los caracteres, pero le pongo la siguiente función: utf8_decode

Y en los headers del email:
Código:
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

Saludos!


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: Diabliyo en 17 Mayo 2011, 18:35 pm
Lo idal seria que en lugar de recurir a la codificacion, especifiques los caracteres no asci por su codigo, por ejemplo la o tildada (ó) es &oacute;

Proba con eso...

Saludos

Por favor lee bien el tema....

Yo envío los correos sin ponerles los códigos de los caracteres, pero le pongo la siguiente función: utf8_decode

Y en los headers del email:
Código:
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

Saludos!

Yo tambien:

Código:
	$cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: [u]nsigned en 17 Mayo 2011, 18:39 pm
El problema con la codificacion es que la ran mayoria de los servidores esta configurado para servir los scrips PHP en ISO-8859-1. Y a veces aunque se indique una distina por medio de header pueden surgir problemas...

Insisto en que representes los caracteres no-asci por su codificacion y no literalmente, de esta forma es totalmente a prueba de fallos. No estoy seguro pero creo que existe una funcion nativa de php para ello.

Saludos


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: Diabliyo en 17 Mayo 2011, 18:42 pm
El problema con la codificacion es que la ran mayoria de los servidores esta configurado para servir los scrips PHP en ISO-8859-1. Y a veces aunque se indique una distina por medio de header pueden surgir problemas...

Insisto en que representes los caracteres no-asci por su codificacion y no literalmente, de esta forma es totalmente a prueba de fallos. No estoy seguro pero creo que existe una funcion nativa de php para ello.

Saludos

Y como explicas el echo de que tengo que pasarle dos veces html_entity_decode( $texto, ENT_QUOTES) ??... Una vez se pasa dos veces, ya envia las palabras acentuadas... Y porque VIA WEB, con solo pasarle UNA VEZ html_entity_decode( $texto, ENT_QUOTES), llegan acentuadas ?

En la web por defecto esta UTF8, en el mail esta por defecto iso-8859-1..

OJO: los envios de mails que hace el script.php (via cron y se le tiene que pasar dos veces html_entity_decode), primero CONSULTA en la BDD las campa~as, despues extra el campo DATA y le paso DOS VECES el html_entity_decode(), despues armo el mail y envio. Y via web hago lo mismo, solo que omito pasar dos veces html_entity_decode(), haciendolo con una sola vez basta.

Saludos !


Título: Re: [utf-8] conflicto con manejo de caracteres !
Publicado por: bomba1990 en 18 Mayo 2011, 01:32 am
no soy muy sabido sobre el tema de los correos, pero no seria manejar todo en el mismo tipo de caracteres es decir todo en utf-8, en el server, en el mail y en el archivo. asi no tienes que pasar las cosas.