[utf-8] conflicto con manejo de caracteres !

Iniciado por Diabliyo, 17 Mayo 2011, 18:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

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:

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:

Curso Virtual de computación




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

http://localhost/test.php
<?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$textoENT_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 ?

[u]nsigned

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

merolhack

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:
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";


Saludos!
PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/

Diabliyo

[quote author=nsigned link=topic=327962.msg1615921#msg1615921 date=1305649609]
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
[/quote]

Por favor lee bien el tema....

Cita de: 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:
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";


Saludos!

Yo tambien:

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

[u]nsigned

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Diabliyo

#5
[quote author=nsigned link=topic=327962.msg1615932#msg1615932 date=1305650390]
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
[/quote]

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 !

bomba1990

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.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve