Asignar codificación UTF-8 con MySQLi PHP

Asignar codificación utf-8 con MySQLi PHP. Cuando estamos desarrollando sistemas suele presentarse este tipo de inconvenientes a la hora de mostrar resultados de la base de datos.
Es decir, las tildes, las enes, comillas, etc. Suelen convertirse en caracteres especiales. Por lo tanto, esto deforma nuestra información, causando molestias por parte del usuario.
Asignar codificación utf-8 con MySQLi PHP
En este artículo veremos cómo corregir errores en los textos extraídos de una tabla en MySQL.
¿Que ocasiona este inconveniente de caracteres especiales?
- Por ejemplo, que la información lo estés guardando en otro conjunto de caracteres que no es UTF8.
- En el fichero de conexión no asignamos la codificación UTF8
¿Cómo solucionar estos inconvenientes con los caracteres especiales?
- Primero: Asignar el cotejamiento UTF8 en la base de datos.
- Segundo: Asignar cotejamiento UTF8 en las tablas y columnas.
- Tercero: Asignar el conjunto de caracteres UTF8 en nuestro archivo de conexión con la base de datos.
Si deseamos obtener los textos sin estos problemas tenemos que asignar correctamente el cotejamiento para poder manipularlos correctamente si por alguna razón usamos un CRUD.
Si bien en HTML5 podemos asignar el UTF8, esto no influye en los resultados MySQL. Por lo tanto, la recomendación es trabajar con UTF8 tanto en la base de datos como en los ficheros PHP.
¿Qué tipo de conexión MySQL puedo aplicar este código?
Para este ejemplo hemos optimizado la conexión MySQLi
$mysqli = new mysqli(hostname, usuario, password, basedatos);
¿En qué momento aplicar este código?
Básicamente podemos aplicar cuando el resultado de nuestra base de datos nos da unos caracteres especiales, dificultando la lectura y la estética de nuestra página o proyecto web. Veamos un ejemplo.

PASOS PARA CORREGIR EL ERROR DE CARACTERES ESPECIALES
A continuación, veremos una serie de pasos para lograr quitar esos caracteres especiales a nuestros resultados MySQL.
- Lo primero que tenemos es editar nuestro archivo de conexión con la base de datos: Por ejemplo, este archivo tiene por nombre: conexion.php
- Dentro del fichero podemos encontrar algo similar a esto.
$servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_buscador"; $db = new mysqli($servidor, $usuario, $password, $nombreBD); if ($db->connect_error) { die("la conexión ha fallado: " . $db->connect_error); }
Para que la conexión y las consultas muestren resultados con codificación UTF-8 solo tenemos que insertar el siguiente código debajo de la última condicional IF.
a) Aplicando condicional IF
if (!$db->set_charset("utf8")) {// Condicional para asignar utf-8 die("Error mostrando el conjunto de caracteres utf8"); }
De esta manera cualquier resultado que emita nuestra base de datos estarán con sus respectivas tildes, eñes, etc. Por lo tanto, esto mantendrá una correcta legibilidad por parte del usuario final.
b) Usando condicional IF ELSE
if (!$db->set_charset("utf8")) { printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error); exit(); } else { printf("Conjunto de caracteres actual: %s\n", $db->character_set_name()); }
Una vez aplicado el siguiente script nuestros resultados MySQL se verán de la siguiente forma:

Si observan la imagen los caracteres especiales han desaparecido de los resultados PHP con MySQL.
ESTRUCTURA COMPLETA DEL EJEMPLO
A continuación, mostraremos un ejemplo completo para aplicar UTF8 en nuestro fichero de conexión.
<?php $servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_buscador"; $db = new mysqli($servidor, $usuario, $password, $nombreBD); if ($db->connect_error) { die("la conexión ha fallado: " . $db->connect_error); } if (!$db->set_charset("utf8")) { printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error); exit(); } else { printf("Conjunto de caracteres actual: %s\n", $db->character_set_name()); } ?>

CONCLUSIÓN
- Su uso es muy recomendado para poder controlar esas molestias de caracteres especiales en nuestros textos. Si tienen problemas similares no duden en aplicar este script.
- Gracias por leerme y no se olviden de comentar ante cualquier inquietud.