martes, 24 de mayo de 2011

Problema de Tildes y Eñes en PHP / MySQL


No toco el tema de la programación a profundidad, no soy ducho en el tema, pero hay algunos problemas que pueden presentársele a uno, y si hubiera existido un post o entrada en un foro salvador con todo lo necesario para probar hasta que algo funcione, me hubiera ahorrado muchísmo tiempo.

Ayer se me presentó un problema de tildes, tanto en la base de datos como en la vista conectada a ella. Aparentemente, todo estaba correctamente, los archivos poseían el meta respectivo en el <head>:


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


Y en la base de datos, al notar que se estaban guardando los datos con caracteres "extraños", cambié el cotejamiento de caracteres, tanto para la base de datos, las tablas como para los campos, a utf8_general_ci, y en el archivo de conexión del php, en la siguiente línea posterior a la conexión, agregué:


@mysql_query("SET NAMES 'utf8'")

En el CMS todos los caracteres aparecían correctamente, en la base de datos igualmente, pero en la vista nada. Probé utilizando:


utf8_encode (http://www.php-es.com/function.utf8-encode.html)


Pero nada. Así que investigando, me topé con una función que me "salvó la vida" y que coloco a continuación.

<?php function _convert($content) {
    if(!
mb_check_encoding($content'UTF-8')
        OR !(
$content === mb_convert_encoding(mb_convert_encoding($content'UTF-32''UTF-8' ), 'UTF-8''UTF-32'))) {

        
$content mb_convert_encoding($content'UTF-8');

        if (
mb_check_encoding($content'UTF-8')) {
            
// log('Converted to UTF-8');
        
} else {
            
// log('Could not converted to UTF-8');
        
}
    }
    return 
$content;
?>


(Sacada de: http://php.net/manual/es/function.utf8-encode.php)

Utilizando esta función en la muestra de resultados de las consultas a la base de datos, por fin pude resolver el problema con las tildes, eñes y caracteres UTF-8.