Latin 1 (8859-1) ---> Unicode (UTF-8)

¿Será posible llevar todo G3W a UTF8?

Veo que actualmente los charsets de los fuentes del SVN, si bien la mayoría está en 8859-1, vienen mixtos.
Recién acabo de convertir todos los archivos php, js y css a utf8 (con un script).
El tema es que a pesar de eso veo caracteres inválidos… un ejemplo, parte del html del login:

<script type='text/javascript'>kernel.renderer.on_arrival({"css":["\/rs.php\/__ignored__\/acceso\/login\/default.css?ns=siu"],"js":["\/rs.php\/acceso\/login\/pagelet_login.js"],"op":"acceso","info":{"id":"login","visible":"1","estado":"inicial","mensajes":[]},"content":"<h2>Ingres\u00c3\u00a1 tus datos<\/h2><form method=\"post\" action=\"http:\/\/docentes.unlm.edu.ar\/acceso?auth=form\" id=\"guarani_form_login\"><div class=\"control-group\"><label class=\"control-label\" for=\"usuario\">Usuario<\/label><div class=\"controls\"><input id=\"usuario\" 

Haciendo foco en “

Ingres\u00c3\u00a1 tus datos</h2>” véan que los 2 bytes de la a acentuada unicode los considera 2 caracteres en vez de uno solo.

Hola, me parece que se debe a que se modifico el archivo de mensajes (src/siu/mensajes/mensajes.es.php) al cambiar de encoding, fíjate si dicho archivo presenta modificaciones debidas al cambio de encoding, en tal caso deshacelas.

saludos.

Al archivo de mensajes tal cual mencionás lo convertí a UTF-8 (junto con el resto de archivos de texto)… pero esa era la idea. De cualquier manera te confirmo que está bien convertido (no quedó con caracteres raros… a todos los archivos los leo bien, no están corruptos).

Lo que no entiendo es porqué si tengo apache configurado para UTF-8 por defecto, el server ubuntu igual, todos los fuentes están en utf8, el proyecto está en utf8 (se mantiene el charset al hacer ediciones), los headers html de todos los fuentes están con charset utf8 (visualización web), a pesar de eso, los caracteres especiales de los mensajes los muestra mal.

Me parece un problema originado al armar la página.

Hola, puede llegar a ser la configuración de PHP (php.ini), revisa los siguientes parámetros:


default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On

También puede ser que haya modificar en los siguientes archivos:
src/siu/operaciones/_comun/templates/pipe.twig

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

y

este otro src/siu/bootstrap.php

kernel::proyecto()->set_encoding('iso-8859-1');

Igualmente nose si esto de pasar a UTF-8 trae problemas con la DB. Pregunta, que versión de 3W usan?

saludos.

rta: La versión de g3w es 2.9.0…

en full.twig y pipe.twig ya había hecho estos cambios:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
    ...
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

En bootstrap.php ya había reemplazado ISO-8859-1 por:

kernel::proyecto()->set_encoding('UTF-8');

En func_util.php (no recuerdo si array_a_utf8 viene originalmente o si es un agregado mio):


function array_a_utf8(&$datos){
    if (is_string($datos)) {
        // agregue este if para que no se recodifique a utf8
        if(mb_detect_encoding($datos) != 'UTF-8') {
            $datos = utf8_encode($datos);
        }
    } else if (is_array($datos)) {
        foreach ($datos as &$value) {
            array_a_utf8($value);
        }
        unset($value);
    } else if (is_object($datos)) {
        $vars = array_keys(get_object_vars($datos));
        foreach ($vars as $var) {
            array_a_utf8($datos->$var);
        }
    }
    return $datos;
}

En php.ini tengo establecido default_charset = “UTF-8” y con eso, según la documentación de php, ya se afecta a la configuración por defecto de mbstring
Lo que sí, activé mbstring.encoding_translation=On porque esa opción la tenía deshabilitada.

PERO a pesar de todo sigue habiendo caracteres inválidos…

Noté que todos los casos en que se ve mal, se corresponde con textos generados desde javascript. Siempre comienza con: kernel.renderer.on_arrival(
Y el problema es que el texto que entra como origen esta mal codificado… no se si se lo codifica 2 veces seguidas a utf8 o si es otro problema. Pero lo cierto es que los caracteres especiales los toma byte a byte.

Dejo un ejemplo de como queda:

<script type='text/javascript'>kernel.renderer.on_arrival({"css":["\/rs.php\/__ignored__\/acceso\/login\/default.css?ns=siu"],"js":["\/rs.php\/acceso\/login\/pagelet_login.js"],"op":"acceso","info":{"id":"login","visible":"1","estado":"inicial","mensajes":[]},"content":"<h2>Ingres? tus datos<\/h2><form method=\"post\" action=\"http:\/\/docentes.unlm.edu.ar\/acceso?auth=form\" id=\"guarani_form_login\"><div class=\"control-group\"><label class=\"control-label\" for=\"usuario\">Usuario<\/label><div class=\"controls\"><input id=\"usuario\" name=\"usuario\" type=\"text\" value=\"\" maxlength=\"20\"\/><\><\><div class=\"control-group\"><label class=\"control-label\" for=\"password\">Clave<\/label><div class=\"controls\"><input id=\"password\" name=\"password\" type=\"password\" value=\"\" maxlength=\"20\"\/><\><\><div class=\"control-group\"><div class=\"controls\"><input id=\"recaptcha_challenge_field\" name=\"recaptcha_challenge_field\" type=\"hidden\" value=\"\" \/><input id=\"recaptcha_response_field\" name=\"recaptcha_response_field\" type=\"hidden\" value=\"\" \/><input id=\"login\"  name=\"login\" type=\"submit\" value=\"Ingresar\" class=\"btn btn-info\"\/><\><\><\/form><a href='http:\/\/docentes.unlm.edu.ar\/acceso\/recuperar'>\u00c2\u00bfOlvidaste tu contrase\u00c3\u00b1a?<BR\/>Recup\u00c3\u00a9rala usando tu email alternativo...<\/a>","clase_js":"login","tiene_archivo_js":"1"});</script><script type='text/javascript'>kernel.renderer.on_arrival({"css":["\/rs.php\/__ignored__\/acceso\/contenido_login\/default.css?ns=siu"],"js":["\/rs.php\/acceso\/contenido_login\/pagelet_contenido_login.js"],"op":"acceso","info":{"id":"contenido_login","visible":"1","estado":"inicial","mensajes":[]},"content":"<h2>SIU Guaran\u00ed<\/h2><p>Algunas de las cosas que pod\u00c3\u00a9s hacer con este sistema son:<\/p><ul><li>Imprimir listados de asistencia.<\/li><li>Imprimir tus actas de curso.<\/li><li>Cargar notas de cursadas.<\/li><li>Imprimir las actas de curso con notas.<\/li><li>Imprimir actas de final.<\/li><li>Cargar notas de finales.<\/li><li>Imprimir actas de final con notas.<\/li><li>Actualizar tus datos personales.<\/li><li>Enviar emails a todos tus alumnos.<\/li><\/ul>","clase_js":"contenido_login","tiene_archivo_js":"1"});</script><script type='text/javascript'>kernel_config.pagelet_count = 2</script>

Hola, la versión 2.9.0 tiene como motor de DB a informix el cual no soporta el encoding UTF-8, la aplicación fue testeada usando 8859-1, no garantizamos que funcione correctamente con UTF-8.

Nota: si queres probar por tu cuenta en el archivo src/siu/bootstrap.php pone el encoding en minúscula:

kernel::proyecto()->set_encoding('utf-8');

Saludos.

Honestamente hice el intento pero no logré hacerlo andar sin errores (los caracteres especiales los muestra mal en varias pantallas) así que tristemente seguirá en ISO-8859-1

Hola, pregunta, para que necesitan pasarlo a UTF-8? es solo para saber si este encoding presenta alguna ventaja frente al que estamos usando actualmente.

saludos.

Se trataba más de un tema evolutivo… ASCII – ISO – UniCode

Lo cierto es que en principio no hay problema de usar latin1. (siempre y cuando no quiera escribir en árabe o mandarín:)

Buenas,
te consulto: estás usando algún IDE, estilo Netbeans o Eclipse? Cuando levantas un proyecto en el IDE tenés que tener cuidado en darle encoding 8859-1 en lugar de UTF-8.