Problema con acentos, ñs y CakePHP

Haciendo pruebas con una aplicación que tengo para proyectos, encontré que cuando cargo acentos, ñs u otros caracteres latinos CakePHP me cortaba las cadenas a partir de la primer ocurrencia del caracter “malo”.

¡Oh no! ¡Problemas de charset! Como estoy con la versión 1.1.16.x no tengo soporte de internacionalización, ni nada.

Googlear fue inútil. No encontré nada. La cuestión es que me fije la codificación del navegador y era la fatídica “Europa Occidental (Windows)”.

CakePHP usa utf-8 para comunicarse con la base de datos. A su vez presupone que se le pasan datos utf-8. Cuando el navegador mandaba los datos los mandaba en latin-1, CakePHP los procesaba como si fueran utf-8 y ahí venía el problema.

Esto pasa porque el servidor está andando sobre Windows y por defecto envía las páginas como iso-8859-1. Basta con corregir esto para que vuelva a funcionar.

¿Cómo eludir el problema sin tener que modificar el código del núcleo ni la configuración del servidor (recordar que esto no siempre está al alcance de uno)?

Agregando en el <head> de la aplicación (dir_aplicacion)/views/layouts/defaults.thtml el siguiente tag:

<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />

Con eso se arregló y ya tengo mis acentos!

Saludos, y hasta la próxima.

Etiquetas: , ,

6 comentarios to “Problema con acentos, ñs y CakePHP”

  1. Jesús Says:

    Yo tengo el problema contrario (en mi aplicación que está en el servidor, en la versión local anda bien). Puedo cargar mis datos sin problemas, se guardan en la base; pero cuando leo un registro, el input no despliega los que tienen acentos, eñes, etc. El find que toma los datos de la base funciona bien. El $this->data llega completo a la vista, pero parece que el helper no puede generar bien el html: aparece value=”” en el input😦
    Uso la versión 1.2 de cakePHP

  2. Antonio Says:

    Yo tengo el mismo problema que jesús, uso la versión 1.2.2.8120 de cakephp, $this->data llega completo a la vista, y puedo visualizarlo a través de un <input type=”text” value=”data[‘Modelo’][‘valor’]?>”/> pero no a través del propio form->helper…

    Si alguien puede ayudar se agradece.
    en mi layout uso:

    en mi base de datos uso codificación: latin_1 spanish_ci

  3. Augusto Says:

    Yo el problema lo tenía cuando en la base guardaba los acentos y en la aplicación no los veía correctamente.

    La solución en este caso es agregar el par key-value dentro del database.php de la carpeta config y agregar ‘encoding’ = ‘utf8’

    con eso ya veo tranquilo los acentos en mi site.

    Saludos…

  4. JOSE MOREY Says:

    Tambien tenia el mismo problema. Pero lo pudimos solicionar con unos compañeros de trabajo.

    Solucion:

    1 En el core.php modificar la linea
    Configure::write(‘App.encoding’, ‘UTF-8’);
    POR
    Configure::write(‘App.encoding’, ‘LATIN1’);

    Recordar que la base de datos, las tablas y campos de las tablas deben estar en latin_1 spanish_ci.

    2. En caso de no funcionar Revisar dos archivos.
    Si crearon en la vistas/layout/ default.ctp verificar que no este llamando al encoding utf-8
    La conexion a la base de datos en el app/config/database.php

    class DATABASE_CONFIG {
    var $default = array(
    ‘driver’ => ‘mysql’,
    ‘persistent’ => ‘false’,
    ‘host’ => ‘localhost’,
    ‘port’ => ”,
    ‘login’ => ‘xxx’,
    ‘password’ => ‘xxx’,
    ‘database’ => ‘xxx’,
    ‘prefix’ => ”,
    ‘encoding’ => ‘latin1’
    );

    var $test = array(
    ‘driver’ => ‘mysql’,
    ‘persistent’ => ‘false’,
    ‘host’ => ‘localhost’,
    ‘port’ => ”,
    ‘login’ => ‘xxxx’,
    ‘password’ => ‘xxx’,
    ‘database’ => ‘xxx’,
    ‘prefix’ => ”,
    ‘encoding’ => ‘latin1’
    );
    }

    Espero que les sirva. Esto funciono en servidor ubunto 6
    Para windows no se ha probado…

  5. Esteban Says:

    Gracias Augusto, esa era la solución para mi problema también.

    Supongo que ahi ya no tendra problemas sin importar si la BD corre en un server linux o windows

    Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: