| Soporte UTF al usar PGO |
|
Hace unos día empece a trabajar en un framework MVC que fuera la base de algunos de los sistema con los que estoy trabajando, y que a la vez me sirviera para crear un curso de MVC que estoy preparando, todo iba bien hasta que me encontré en la etapa de creación ORM, es decir, la capa que permite acceder a la base de datos como objetos en lugar de como tablas. En un principio pensé el Doctrine o Propel y me puse a verlos, me encontré con si bien son sistemas maduros y que seguramente funcionarían sufren de un crecimiento excesivo. En mi experiencia personal sé que cuando desarrollas un sistema para una base de datos determinada, muy rara vez te verás en la necesidad de cambiar de motor de base de datos y siendo así ¿Para que necesitamos una capa ORM multimotor? luego encontré POG (PHP Object Generator) un generador de código ORM creado para mySQL que entrega un conjunto pequeño y manejable de archivos. El problema con POG era que este ORM no era capaz de trabajar con caracteres acentuados ni eñes, la solución consiste en hacer unas ligeras modificaciones a sus clases base, son las siguientes: 1. Editar todos los archivos y convertirlos a UTF-8, esto debe hacerse solo con el primer paquete, es decir el que se descarga cuando se crea la primera tabla en el generador de código de POG. 2. La primera línea de los archivos php deberá en donde queramos soporte UTF header("Content-type: text/html; charset=utf-8"); 3. Modificar la línea 22 de class.database.php, la clase de más bajo nivel que genera POG, la sección a modificar quedaría de la siguiente forma: $databaseUser = $GLOBALS['configuration']['user']; $databasePassword = $GLOBALS['configuration']['pass']; $databasePort = $GLOBALS['configuration']['port']; $this->connection = mysql_connect ($serverName.":".$databasePort, $databaseUser, $databasePassword); mysql_query("set names 'utf8'"); //Añadido por KGS para dar soporte UTF a POG if ($this->connection) { if (!mysql_select_db ($databaseName)) { throw new Exception('I cannot find the specified database "'.$databaseName.'". Please edit configuration.php.'); } (la línea en negrita es la que debe insertarse)
|