Datatables Tildes y Eñes Solución
Datatables Tildes y eñes Solución. Cuando trabajamos en nuevos proyectos web es casi seguro que usaremos la librería Datatables para gestionar la información de nuestras tablas en un potente CRUD.
Generalmente, cuando integramos Datatables suelen presentarse el problema de las Tildes y Eñes (Caracteres especiales).Por ende, tenemos que darle solución de una manera inteligente.
Datatables Tildes y eñes Solución
La solución es gestionar las conexiones MySQL con UTF-8 ya sea que estemos usando PDO o MySQLi
Primer ejemplo: Usando PDO
A continuación, veremos una conexión simple usando la arquitectura PDO sin el cotejamiento UTF-8
$pdo = new PDO(
'mysql:host=mihost;dbname=mibd',
'miusuario',
'mipassword')
);
La solución es agregar UTF8 para que acepte tildes y eñes en nuestro CRUD Datatables de una manera sencilla en las variables de conexión, veamos un ejemplo.
$pdo = new PDO(
'mysql:host=mihost;dbname=mibd',
'miusuario',
'mipassword',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
Explicación del script.- SI observan hemos aplicado UTF8 después de la contraseña de conexión MySQL usando una coma (array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
).
Otro punto importante es preparar nuestra tabla y columnas con utf8mb4 en la definición de su columna MySQL.
Aquí hay un ejemplo de una definición de tabla «personas» MySQL con una columna que usa utfmb4:
CREATE TABLE `personas` (
`nombres` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Segundo ejemplo: Usando MySQLi
Si estamos usando el tipo de conexión MySQLi también podemos asignar utf8 a nuestra conexión, veamos un ejemplo completo.
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
$mysqli->set_charset('utf8mb4');
//Insercion de contenido con caracteres especiales
$mysqli->query("INSERT INTO `personas` VALUES ('La cacería de Muñoz fue un éxito.')");
$result = $mysqli->query("SELECT * FROM `personas` LIMIT 1");
$persona = $result->fetch_object();
if($persona)
printf ("La nueva persona se llama: %s.\n", $person->name);
?>
Cuando insertamos «La cacería de Muñoz fue un éxito.» en la base de datos, el nombre se almacena tal cual, sin cambios. El script también imprime el nombre sin cambios: «La nueva persona se llama: La cacería de Muñoz fue un éxito.».
Conclusiones y recomendaciones
En algunas ocasiones la no declaración de UTF8 en nuestras conexiones MySQL suele mostrar error en Datatables y solo mostraría el tradicional mensaje de alerta cuando existe un error.
Es importante desde un inicio declarar que nuestra tabla trabajara en algún momento con caracteres especiales y es muy recomendado agregar el UTF8 en las conexiones MySQL.
Espero que esto te ayude a resolver tu problema. Déjame saber si lo hace o no.